APIv2
API v2 Overview
APIv2 is ProVision's currently supported RESTful API version. APIv2 improvements include:
- HTTPS Basic Authentication
- Use of HTTP Methods (GET, PUT, POST, etc.)
- Supports JSON payloads
- Additional endpoints and functionality
APIv2 Access Options
To test or execute APIv2 queries, you may:
- Use a browser extension / desktop REST client, such as Postman
Postman is the current industry standard: Go to https://www.getpostman.com/ to install, and visit the Postman Learning Center for user documentation, training videos, and support help.
- Access the APIv2 Swagger documentation from your instance ( instance/dev/swagger), which provides the ability to test inputs and responses using your instance data.
- Continue to the section below: "APIv2 - Using Swagger" for more details, or see the Developer Tools page for a broader overview.
- Use CURL in the command line to authenticate and execute APIv2 endpoints. See cURL documentation at https://curl.haxx.se/.
- Continue to the section below: "APIv2 - Using cURL" for more details, examples, and tips.
APIv2 - Using Swagger
Accessing Swagger
Public APIv2 documentation is located at https://cloud.6connect.com/APIv2/.
APIv2 documentation includes:
Includes actions for LIRs, IP aggregate and block management, VLAN, IP Rules, and SWIP.
Includes actions for managing the Resource System.
The resource API provides CRUD endpoints for resources, resource attributes, resource attachments and resource backups.
Provides CRUD endpoints for resource views.
The DNS API allows you to manage DNS Zones, Records, Servers, Groups and ACLS.
Allows you to manage routers and BGP sessions.
Allows you to manage contacts.
Includes actions for Users, permissions and actions.
Includes actions for Groups, permissions and actions
The API Allows you to easily schedule tasks.
API Composer Platform (ACP) is an additional module to help automate frequently used combinations of calls.
Includes actions for SSH credentials and SHH Routes.
Existing customers may also access APIv2 Documentation from your instance (user must have Admin permissions):
- Log into your ProVision instance.
- Go to the Admin area of ProVision and click on the API Tab.
Under the API dropdown menu, click the Swagger link provided. You may also click on the "APIv2 Swagger Documentation" link provided under the APIv2 section of the page.
Viewing APIv2 Information
On the API Swagger home page, click on the name link for the API family that you wish to browse (IPAM, Resource, DNS, etc).
Once on an API Family page, verify that the displayed server name is correct for your instance/local server.
Scroll further down the page and begin reviewing available APIv2 calls and details. Clicking on any call will expand it to view parameter details - you can even test call responses (using your instance data) by clicking "Try it Out"!
Some calls that involve a JSON request body payload (PUT, PATCH, etc) will display "Example Value" and "Model" information under a "Request Body" section - additional parameter descriptions may be displayed under "Model" Information.
Additional "Model" examples are available at the bottom of the page with additional descriptive information.
Testing/Executing Endpoints in Swagger
You may execute endpoints in Swagger by using the "Try it out" button for any call.
- Navigate to the call that you want to try out.
Expand the call to view its details, then click the "Try it out" button.
Input the desired parameters to test, and click "Execute".
The example response will display under "Responses" after being executed. The "Response" section also includes the cURL command, Request URL, and Response Headers.
APIv2 - Nested Queries
You can use nesting to write more complicated API calls to handle multiple conditions. Here, we'll illustrate a query with an OR / AND condition, such as to find resource entries with (Section = 76 OR Section = 77) AND managed = Yes:
{"type": "entry","attrs":[{"key":"_custom_id","value":"101","rule":"AND"},{"attr_rule":"AND","attr_nested":[{"attr_key":"_section","attr_value":"78","attr_rule":"OR"},{"attr_key":"_section","attr_value":"74","attr_rule":"OR"}]}]}
You should be able to adapt that to point at whatever attributes you like.
Here it is in CURL format:
curl -X POST "https://$HOSTNAME/instance/api/v2/resources/query" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"type\":\"entry\",\"attrs\":[{\"key\":\"_custom_id\",\"value\":\"101\",\"rule\":\"AND\"},{\"attr_rule\":\"AND\",\"attr_nested\":[{\"attr_key\":\"_section\",\"attr_value\":\"78\",\"attr_rule\":\"OR\"},{\"attr_key\":\"_section\",\"attr_value\":\"74\",\"attr_rule\":\"OR\"}]}]}"
APIv2 - Using cURL
One option to execute an APIv2 call is to use CURL from the Command Line.
If you do not already have cURL installed, you may download it and access its documentation at https://curl.haxx.se/.
cURL syntax template for APIv2:
When using cURL, the general layout of the cURL command will be as follows:
- Invoke cURL:
curl -X PATCH "https://$HOSTNAME/instance/api/v2/config" -H "Content-Type:application/json;charset=utf-8" -u testing@example.com:password -d "{\"auto_merge_limits\":\"10\"}"
- Use the Request Flag (-X):
curl -X PATCH "https://$HOSTNAME/instance/api/v2/config" -H "Content-Type:application/json;charset=utf-8" -u testing@example.com:password -d "{\"auto_merge_limits\":\"10\"}"
- This specifies a custom request method to use when communicating with the HTTP server. The specified request method will be used instead of the method otherwise used (which defaults to GET)
- Specify the HTTP Action:
curl -X PATCH "https://$HOSTNAME/instance/api/v2/config" -H "Content-Type:application/json;charset=utf-8" -u testing@example.com:password -d "{\"auto_merge_limits\":\"10\"}"
- In quotes, specify the URL of the APIv2 endpoint you are executing. This should be similar to: "https://$HOSTNAME/instance/api/v2/[endpoint family-action]"
curl -X PATCH "https://$HOSTNAME/instance/api/v2/config" -H "Content-Type:application/json;charset=utf-8" -u testing@example.com:password -d "{\"auto_merge_limits\":\"10\"}"
- Use the Header Flag (-H):
curl -X PATCH "https://$HOSTNAME/instance/api/v2/config" -H "Content-Type:application/json;charset=utf-8" -u testing@example.com:password -d "{\"auto_merge_limits\":\"10\"}"
- Denotes an extra header to include in the request when sending HTTP to a server. You may specify any number of extra headers. Note that if you should add a custom header that has the same name as one of the internal ones curl would use, your externally set header will be used instead of the internal one. This allows you to make even trickier stuff than curl would normally do.
- Add endpoint-specific data, such as specifying a JSON payload or attribute setting. This may involve one or more additional flags or information sets, depending on the endpoint:
curl -X PATCH "https://$HOSTNAME/instance/api/v2/config" -H "Content-Type:application/json;charset=utf-8" -u testing@example.com:password -d "{\"auto_merge_limits\":\"10\"}"
Tip!
Swagger displays cURL commands and request URLs in the execution response!
Use the "Try it Now" feature from your instance's Swagger page (Accessed from Admin → API Tab → APIv2 Swagger Documentation) for the endpoint/attribute changes you wish to make, and view the cURL command for that change. Copy the command text, and use it as a template for your next cURL execution of the command!
For help using Swagger to test endpoints, see "Testing Endpoints in Swagger" in this APIv2 documentation page.
cURL Examples
Example: cURL APIv2 Authentication
This example authenticates a user, so that you may perform APIv2 commands as that user.
curl -X GET "https://$HOSTNAME/instance/api/v2/config" -H "accept: */*" -u testing@example.com
This will ask for a password. To hard-code it with a password, add it to the end like so:
curl -X GET "https://$HOSTNAME/instance/api/v2/config" -H "accept: */*" -u testing@example.com:password
APIv2 commands are executed as the user provided, so their permissions must be set appropriately. The Swagger "execute" feature produces CURL strings that can be used to test specific API commands.
Example: cURL APIv2 POST Command
This example illustrates how to provide POST/PATCH data to an APIv2 command via cURL. This command updates the automerge configuration setting:
curl -X PATCH "https://$HOSTNAME/instance/api/v2/config" -H "Content-Type:application/json;charset=utf-8" -u testing@example.com:password -d "{\"auto_merge_limits\":\"10\"}"
Review the general CURL documentation at https://curl.haxx.se/ can offer greater insight into what other flags can be used.
Example: cURL / APIv2 Nested Query
You can use nesting to write more complicated API calls to handle multiple conditions. Here, we'll illustrate a query with an OR / AND condition, such as to find resource entries with (Section = 76 OR Section = 77) AND managed = Yes:
{"type": "entry","attrs":[{"key":"_custom_id","value":"101","rule":"AND"},{"attr_rule":"AND","attr_nested":[{"attr_key":"_section","attr_value":"78","attr_rule":"OR"},{"attr_key":"_section","attr_value":"74","attr_rule":"OR"}]}]}
The items in bold red are the necessary components to achieve the AND/OR condition in a nested format, though the attributes used may be changed depending on your needs.
The same query in cURL is given below:
curl -X POST "https://$HOSTNAME/instance/api/v2/resources/query" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"type\":\"entry\",\"attrs\":[{\"key\":\"_custom_id\",\"value\":\"101\",\"rule\":\"AND\"},{\"attr_rule\":\"AND\",\"attr_nested\":[{\"attr_key\":\"_section\",\"attr_value\":\"78\",\"attr_rule\":\"OR\"},{\"attr_key\":\"_section\",\"attr_value\":\"74\",\"attr_rule\":\"OR\"}]}]}"
Example: cURL APIv2 Attach Zone to a DNS Group
To attach a newly created DNS Zone to a DNS Group using APIv2, you need to make a Resource Link with the relation type "dnsZoneView":
curl -X POST "https://$HOSTNAME/instance/api/v2/resources/274/links" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"resource_id\":\"15648\",\"relation\":\"dnsZoneView\",\"data\":{}}"
Where resource #274 is the "Default Group" on the instance (your instance may vary), and Resource #15648 is the resource ID for the new zone. The two are now linked together.
To attach a DNS server to a DNS Group you use the same process but the relation is "dnsViewServer".
To attach a zone to a server directly the relation is either "dnsZoneMaster" or "dnsZoneSlave" depending on what you're doing.
Additional Information
See the following areas for additional information:
- Developer Tools
- Public APIv2 Swagger documentation: https://cloud.6connect.com/APIv2/.