Fabric APIs
52 TopicsNew Fabric APIs expand usablity
Connect Using Service Token - Equinix APIs use OAuth 2.0 protocol to authenticate the requests you make to API endpoints. In order to interact with Equinix APIs, you need a bearer acess token. Bearer determines the type of authentication scheme and is a part of the OAuth 2.0 protocol. https://developer.equinix.com/docs6.4KViews1like1CommentPagination for fabric connections search?
I'm writing a script to see how oversubscribed my fabric ports are, by totaling the bandwidth of connections on each port. I'm having trouble with the pagination, no matter what I set for offset and limit in the query parameters, it always seems to come back with offset=0. https://api.equinix.com/fabric/v4/connections/search {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=20&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=40&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=60&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=80&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=100&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=120&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=140&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=160&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} https://api.equinix.com/fabric/v4/connections/search?offset=180&limit=20 {'next': '/search?offset=20&limit=20', 'offset': 0, 'total': 193, 'limit': 20} import requests def get_bearer_token(): auth_url = 'https://api.equinix.com/oauth2/v1/token' credentials = { 'grant_type': 'client_credentials', 'client_id': 'XXXXXXXXXXXXXXXXXX', 'client_secret': 'YYYYYYYYYYYYYYYYY' } credentials_response = requests.post(auth_url, json=credentials).json() return credentials_response['access_token'] token=get_bearer_token() headers = {'Authorization': 'Bearer {}'.format(token)} api_v4_url_base = 'https://api.equinix.com/fabric/v4' ports = dict() ports_url = api_v4_url_base + '/ports' ports_response = requests.get(ports_url, headers=headers).json() for port in ports_response['data']: name = port['name'] bandwidth = port['bandwidth'] ports[name] = dict() ports[name]['bandwidth'] = bandwidth ports[name]['connected_bandwidth']=0 ports[name]['connections'] = dict() connections = dict() connections_url = api_v4_url_base + '/connections' search_base = '/search' filter_data = {'filter': { 'and': [ { 'property': '/aSide/accessPoint/port/name', 'operator': '=', 'values': list(ports.keys()) }, { 'property': '/operation/equinixStatus', 'operator': '=', 'values': [ 'PROVISIONED', 'DEPROVISIONED' ] } ] } } more = True offset = 0 while more == True: connections_url_search = connections_url + search_base print(connections_url_search) connections_response = requests.post( connections_url_search, json=filter_data, headers=headers).json() total = connections_response['pagination']['total'] limit = connections_response['pagination']['limit'] print(connections_response['pagination']) if offset + limit > total: more = False else: offset += limit search_base = '/search?offset={}&limit={}'.format(offset, limit) #for connection in connections_response['data']: # port = connection['aSide']['accessPoint']['port']['name'] # name = connection['name'] # bandwidth = connection['bandwidth'] # ports[port]['connected_bandwidth'] += bandwidth # ports[port]['connections'][name] = connection # print("{}: {} - {}".format(name, bandwidth, port)) #print() I tried also just using the "next" page value from the response, but it had this problem too, so I tried calculating the offset myself. It always seems to only return the first page. Setting the limit as 10 for example also seems to have no effect, still returning 20 records. Can anyone reproduce this or tell me what I'm doing wrong? Thanks!Solved5.5KViews1like4CommentsFilter "portName" on connection list not working
Hello, for theendpoint GET https://api.equinix.com/ecx/v3/l2/seller/connections I use it with the profileId filter and I get back many results.I go from page to page to list the connection I have on one specific port. I would like to reduce those calls using the filter portName.However the result is always empty : { "isFirstPage": true, "isLastPage": true, "totalCount": 0, "pageSize": 20, "content": [], "pageNumber": 0 } Have anyone succeeded in getting this to work ? Best regards,5KViews0likes7CommentsAPI service accounts for Fabric API?
Currently I'm using the API token associated with my personal login to Equinix for the Fabric API. What's the best way to make an API token for a service sharable by a group of people at my company? Should I just make an Equinix login like first name Cloud last name Fabric, and then make an API token from that, or is there another way?Solved4.4KViews1like3CommentsError when setting up multiple connections
I sent a request to setup a primary and secondary connection with the body containing data structured like the following: { "data": [ { "type": "EVPL_VC" }, { "type": "EVPL_VC" } ] } When sending this I get the following error response which is obviously not correct: [ { "errorCode": "EQ-3142501", "errorMessage": "Invalid argument value passed", "details": "Invalid request type", "correlationId": "null-0000-103911409258-api", "additionalInfo": [ { "property": "/type", "reason": "Allowed values: EVPL_VC, EPL_VC, IP_VC, ACCESS_EPL_VC" } ] } ] The typefield in both cases is set to a valid value, EVPL_VC. If I just create a single connection with either of the entries of the data array the connections setup properly.3.5KViews0likes4CommentsAPI mismatch introduced on 12 February 2022
Hi, We noticed that on 12 February you introduced a breaking change on the API which is undocumented. When doing https://developer.equinix.com/catalog/buyerv3 the response does no longer contain "isLastPage" but contains "last" which is not documented. { "first": "TRUE", "last": "FALSE", "number": 0, "numberOfElements": 20, "size": 20, "sort": [ { "ascending": "FALSE", "descending": "TRUE", "direction": "DESC", "ignoreCase": "FALSE", "nullHandling": "NATIVE", "property": "created_date" } ], "totalElements": 8051, "totalPages": 403 } Can we have an explanation on this and get it back aligned with the documentation?Solved3.4KViews0likes4CommentsFabric API generate token using client_credentials
I am trying to generate token using this method but in Postman: Access Token using grant_type = client_credentials (Recommended). POST 'https://api.equinix.com/oauth2/v1/token' -H "content-type: application/json" -d '{ "grant_type": "client_credentials", "client_id": "******", "client_secret": "****" }' I have the body set as specified in the link: https://developer.equinix.com/docs?page=/dev-docs/fabric/overview but when I execute the query I get this error: { "errorDomain": "apps-fqa", "errorTitle": "Unable to Process the Request", "errorCode": "S1002", "developerMessage": "Failed to execute the ExtractVariables: extractjsonparams", "errorMessage": "Unable to Process the Request, Please try again later." } I have a client_id and client_sercret generated and have tested it with Terraform. What am I missing? Thanks!Solved3.3KViews0likes3Comments