{"items":[{"type":"link","label":"Authorizer API","link":"/authorizer-api/openapi","routeSlug":"/authorizer-api/openapi","content":{"contentType":"overview","meta":{"name":"Authorizer API"},"children":[{"nodeType":"container","panels":[{"title":"Download OpenAPI description","titleTranslationKey":"download.description.title","children":[{"kind":"download","label":"openapi.json","url":"/_bundle/authorizer-api/openapi.json?download"},{"kind":"download","label":"openapi.yaml","url":"/_bundle/authorizer-api/openapi.yaml?download"}]},{"title":"Overview","titleTranslationKey":"info.title","children":[{"kind":"email","title":"EchoSync Integrations API","email":"IntegrationsAPI@echo.com","label":"IntegrationsAPI@echo.com","withCopyButton":true,"copyContent":"IntegrationsAPI@echo.com"}]},{"title":"Languages","titleTranslationKey":"languages.title","children":[{"kind":"languages","options":[{"key":"curl","title":"curl","lang":"curl"},{"key":"javascript","title":"JavaScript","lang":"JavaScript"},{"key":"node","title":"Node.js","lang":"Node.js"},{"key":"python","title":"Python","lang":"Python"},{"key":"java","title":"Java","lang":"Java"},{"key":"csharp","title":"C#","lang":"C#"},{"key":"php","title":"PHP","lang":"PHP"},{"key":"go","title":"Go","lang":"Go"},{"key":"ruby","title":"Ruby","lang":"Ruby"},{"key":"r","title":"R","lang":"R"},{"key":"payload","title":"Payload","lang":"Payload"}]}]},{"title":"Servers","titleTranslationKey":"servers.title","children":[{"kind":"servers","servers":[{"description":"Production","url":"https://auth.echo.com"}],"mode":"default"}]}],"children":[{"nodeType":"overview-section-wrapper","children":[{"nodeType":"header","level":1,"label":"Authorizer API (1.0.0)","showPageActions":true},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"The EchoSync Authorizer API is the authentication service for the EchoSync"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"platform. It validates your application credentials and issues OAuth 2.0"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Bearer tokens that grant access to EchoSync APIs."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Not every EchoSync API uses the Authorizer, and not every one requires a"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Bearer token. The Carrier API requires a Bearer token from this service. The"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Pricing API accepts either a Bearer token or Basic Authentication. The"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Shipper API uses Basic Authentication only and does not use this service."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Where a Bearer token is required, send it in the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"Authorization"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" header:"},"children":[]}]}]},{"$$mdtype":"Node","type":"fence","attributes":{"content":"Authorization: Bearer {your_token}\n"},"children":[{"$$mdtype":"Node","type":"text","attributes":{"content":"Authorization: Bearer {your_token}\n"},"children":[]}]}]}],"sectionId":"/"}],"sectionId":"/"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/token-lifecycle"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Token Lifecycle"},"children":[]}]}]},{"$$mdtype":"Node","type":"blockquote","attributes":{},"children":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Important"},"children":[]}]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Reuse your token until it expires."},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Do not request a new token on every API call."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Cache the token and use it for its full validity period."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Requesting new tokens repeatedly within the same validity window may trigger rate limiting."},"children":[]}]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Access tokens are valid for "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"86400 seconds"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" (24 hours) from the time they are issued."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"The endpoint "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"/token"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" response includes:"},"children":[]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"expires_in"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — token lifetime in "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"seconds"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" (used to determine when the token should be refreshed)"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"scope"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — the permissions granted to the token, defining which APIs it can access"},"children":[]}]}]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"A "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"401 Unauthorized"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" response from any EchoSync API indicates the token is expired or invalid."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"In this case, request a new token and retry the request."},"children":[]}]}]}]}]}],"sectionId":"/section/token-lifecycle"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/rate-limiting"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Rate Limiting"},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"To ensure fair usage, maintain service availability, and protect system performance, requests may be subject to rate limiting."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"When usage exceeds allowed thresholds, requests can be temporarily throttled or rejected until the limit window resets."},"children":[]}]}]}]}],"sectionId":"/section/rate-limiting"}]}]}},{"type":"link","label":"Token Lifecycle","link":"/authorizer-api/openapi/section/token-lifecycle","routeSlug":"/authorizer-api/openapi/section/token-lifecycle","content":null},{"type":"link","label":"Rate Limiting","link":"/authorizer-api/openapi/section/rate-limiting","routeSlug":"/authorizer-api/openapi/section/rate-limiting","content":null},{"type":"group","label":"token","link":"/authorizer-api/openapi/token","routeSlug":"/authorizer-api/openapi/token","items":[{"label":"Obtain a bearer token from Echo Global Logistics","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/authorizer-api/openapi/token/token","routeSlug":"/authorizer-api/openapi/token/token","metadata":{"seo":{"title":"Obtain a bearer token from Echo Global Logistics","description":"Exchanges your application credentials for an OAuth 2.0 Bearer tokenusing the Client Credentials flow."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"token","name":"Obtain a bearer token from Echo Global Logistics","isWebhook":false,"pointer":"/paths/~1token/post","hasSamples":true},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Obtain a bearer token from Echo Global Logistics","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Exchanges your application credentials for an OAuth 2.0 Bearer token"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"using the Client Credentials flow."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Submit your "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"client_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"client_secret"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"grant_type"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", and "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"scope"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"as form fields. On success, the response contains the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"access_token"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"and its expiration time ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"expires_in"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", in seconds)."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Cache and reuse the token for its full lifetime. Only call this"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"endpoint again after the token expires."},"children":[]}]}]}]},{"nodeType":"item-content","variant":"body","label":"Request Body","labelTranslationKey":"body","mediaTypes":["application/x-www-form-urlencoded"],"mediaTypeSchemas":{"application/x-www-form-urlencoded":{"schemaId":"schema_0"}},"schemaId":"schema_0","pointer":"/paths/~1token/post/requestBody"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"POST","path":"/token","servers":[{"url":"https://auth.echo.com","description":"Production"}],"parameters":{"path":[],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[],"requestBody":{"application/x-www-form-urlencoded":{"schemaId":"schema_0"}},"responseCodes":["200","400","401"],"pointer":"/token","href":"token/token","openApiOperationId":"token","summary":"Obtain a bearer token from Echo Global Logistics"},"isWebhook":false,"hideReplay":false,"servers":[{"url":"https://auth.echo.com","description":"Production"}],"schemaId":"schema_0","mediaTypes":["application/x-www-form-urlencoded"],"mediaTypeSchemas":{"application/x-www-form-urlencoded":{"schemaId":"schema_0"}},"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Success","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Token","exampleIds":["paths/~1token/post/responses/200/content/application~1json/examples/grant_type_client_credentials"]}},"schemaId":"components/schemas/Token","exampleIds":["paths/~1token/post/responses/200/content/application~1json/examples/grant_type_client_credentials"]},{"code":"400","description":"Bad Request","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1token/post/responses/400/content/application~1json/examples/invalid_client","paths/~1token/post/responses/400/content/application~1json/examples/invalid_grant","paths/~1token/post/responses/400/content/application~1json/examples/missing_param"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1token/post/responses/400/content/application~1json/examples/invalid_client","paths/~1token/post/responses/400/content/application~1json/examples/invalid_grant","paths/~1token/post/responses/400/content/application~1json/examples/missing_param"]},{"code":"401","description":"Unauthorized","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1token/post/responses/401/content/application~1json/examples/failed_auth","paths/~1token/post/responses/401/content/application~1json/examples/no_access"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1token/post/responses/401/content/application~1json/examples/failed_auth","paths/~1token/post/responses/401/content/application~1json/examples/no_access"]}],"pointer":"/paths/~1token/post/responses"}],"panels":[{"children":[{"kind":"response","responseCodes":[{"code":"200","schemaId":"components/schemas/Token","exampleIds":["paths/~1token/post/responses/200/content/application~1json/examples/grant_type_client_credentials"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Token","exampleIds":["paths/~1token/post/responses/200/content/application~1json/examples/grant_type_client_credentials"]}}},{"code":"400","schemaId":"components/schemas/Error","exampleIds":["paths/~1token/post/responses/400/content/application~1json/examples/invalid_client","paths/~1token/post/responses/400/content/application~1json/examples/invalid_grant","paths/~1token/post/responses/400/content/application~1json/examples/missing_param"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1token/post/responses/400/content/application~1json/examples/invalid_client","paths/~1token/post/responses/400/content/application~1json/examples/invalid_grant","paths/~1token/post/responses/400/content/application~1json/examples/missing_param"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1token/post/responses/401/content/application~1json/examples/failed_auth","paths/~1token/post/responses/401/content/application~1json/examples/no_access"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1token/post/responses/401/content/application~1json/examples/failed_auth","paths/~1token/post/responses/401/content/application~1json/examples/no_access"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/token/token"}],"panels":[]}]},"httpPath":"/token"}],"content":{"contentType":"group","meta":{"name":"token"},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"token","showPageActions":true},{"nodeType":"markdoc","content":"Obtaining and using tokens"}],"panels":[{"children":[{"kind":"group-items","title":"Operations","titleTranslationKey":"operations","items":[{"title":"/token","summary":"Obtain a bearer token from Echo Global Logistics","prefix":{"name":"post","color":"post"},"badges":[],"link":"/token/token","deprecated":false}]}]}]}]}}],"store":{"schemaStore":{"components/schemas/Token":{"id":"components/schemas/Token","kind":"json-schema","title":"Token","data":{"type":"object","properties":{"access_token":{"type":"string","description":"JSON Web Token (JWT) that represents a session generated for a client"},"expires_in":{"type":"integer","description":"Number of seconds until the session expires"},"token_type":{"type":"string","description":"Type of access token - always set to Bearer"},"scope":{"type":"string","description":"scope(s) approved with the token"}}}},"components/schemas/Error":{"id":"components/schemas/Error","kind":"json-schema","title":"Error","data":{"type":"object","properties":{"error":{"type":"string","description":"Short indicator of error type"},"error_desc":{"type":"string","description":"Description of error"}}}},"schema_0":{"kind":"json-schema","data":{"type":"object","properties":{"client_id":{"type":"string","description":"The supplied client ID generated for your application"},"client_secret":{"type":"string","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"The supplied client secret generated for your application "},"children":[]},{"$$mdtype":"Node","type":"tag","tag":"html","inline":true,"attributes":{"name":"p","attrs":{}},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Required if grant_type is"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" "},"children":[]},{"$$mdtype":"Node","type":"em","inline":true,"attributes":{"marker":"*"},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"client_credentials"},"children":[]}]}]}]}]}]}]},"grant_type":{"type":"string","description":"The type of grant you are using to obtain a token","enum":["client_credentials"]},"scope":{"type":"string","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"The scope(s) being requested by the application "},"children":[]},{"$$mdtype":"Node","type":"tag","tag":"html","inline":true,"attributes":{"name":"p","attrs":{}},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Scopes are space-delimited"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" "},"children":[]},{"$$mdtype":"Node","type":"tag","tag":"html","inline":true,"attributes":{"name":"p","attrs":{}},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Scopes that are granted will be returned in the access token"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" "},"children":[]},{"$$mdtype":"Node","type":"tag","tag":"html","inline":true,"attributes":{"name":"p","attrs":{}},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Required if grant_type is"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" "},"children":[]},{"$$mdtype":"Node","type":"em","inline":true,"attributes":{"marker":"*"},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"client_credentials"},"children":[]}]}]}]}]}]}],"enum":["quotes:create","tender:action","load_status:read","invoice:read","connect_api:action","loads:read","loads:action"]}},"required":["client_id","client_secret","grant_type","scope"]},"id":"schema_0"}},"exampleStore":{"paths/~1token/post/responses/200/content/application~1json/examples/grant_type_client_credentials":{"value":{"access_token":"NWE4Nzg2ZDEtNzQyMS00ZDViLThjMjctMGQwNjlmZjU5MWNkBGjFElT7CWzl0d....","expires_in":3600,"token_type":"Bearer","scope":"quotes:create"},"key":"grant_type_client_credentials","summary":"Grant type as client_credentials","id":"paths/~1token/post/responses/200/content/application~1json/examples/grant_type_client_credentials"},"paths/~1token/post/responses/400/content/application~1json/examples/invalid_client":{"value":{"error":"invalid_request","error_desc":"Resource not found"},"key":"invalid_client","summary":"Invalid client id","id":"paths/~1token/post/responses/400/content/application~1json/examples/invalid_client"},"paths/~1token/post/responses/400/content/application~1json/examples/invalid_grant":{"value":{"error":"invalid_grant","error_desc":"grant request is invalid"},"key":"invalid_grant","summary":"Grant has been used or has expired","id":"paths/~1token/post/responses/400/content/application~1json/examples/invalid_grant"},"paths/~1token/post/responses/400/content/application~1json/examples/missing_param":{"value":{"error":"invalid_request","error_desc":"missing required parameter(s). (redirect_uri)"},"key":"missing_param","summary":"Missing required parameter","id":"paths/~1token/post/responses/400/content/application~1json/examples/missing_param"},"paths/~1token/post/responses/401/content/application~1json/examples/failed_auth":{"value":{"error":"invalid_request","error_desc":"Authentication Failed"},"key":"failed_auth","summary":"Failed authentication","id":"paths/~1token/post/responses/401/content/application~1json/examples/failed_auth"},"paths/~1token/post/responses/401/content/application~1json/examples/no_access":{"value":{"error":"invalid_request","error_desc":"Access is unauthorized"},"key":"no_access","summary":"No access","id":"paths/~1token/post/responses/401/content/application~1json/examples/no_access"}},"securitySchemeStore":{"basicAuth":{"id":"basicAuth","type":"http","scheme":"basic"},"apiKey":{"id":"apiKey","type":"apiKey","in":"header","paramName":"x-api-key"}},"specVersion":"3.0.0","servers":[{"url":"https://auth.echo.com","description":"Production"}],"specType":"openapi"},"options":{"jsonSamplesExpandLevel":"all","mockServer":{"url":"/_mock/authorizer-api/openapi","position":"off","description":"Mock server"},"disableRouter":true,"downloadUrls":[{"url":"/_bundle/authorizer-api/openapi.json?download"},{"url":"/_bundle/authorizer-api/openapi.yaml?download"}],"excludeFromSearch":false,"replayFeatures":{"graphql":false},"specType":"openapi","markdocOptions":{"tags":{},"nodes":{},"components":{}},"metadata":{"title":"Authorizer API","description":"The EchoSync Authorizer API is the authentication service for the EchoSync\nplatform. It validates your application credentials and issues OAuth 2.0\nBearer tokens that grant access to EchoSync APIs.\n\nNot every EchoSync API uses the Authorizer, and not every one requires a\nBearer token. The Carrier API requires a Bearer token from this service. The\nPricing API accepts either a Bearer token or Basic Authentication. The\nShipper API uses Basic Authentication only and does not use this service.\n\nWhere a Bearer token is required, send it in the `Authorization` header:\n```\nAuthorization: Bearer {your_token}\n```\n\n## Token Lifecycle\n\n> **Important**\n> **Reuse your token until it expires.** Do not request a new token on every API call. \n> Cache the token and use it for its full validity period. \n> Requesting new tokens repeatedly within the same validity window may trigger rate limiting.\n\n- Access tokens are valid for **86400 seconds** (24 hours) from the time they are issued.\n- The endpoint `/token` response includes:\n  - `expires_in` — token lifetime in **seconds** (used to determine when the token should be refreshed)\n  - `scope` — the permissions granted to the token, defining which APIs it can access\n- A `401 Unauthorized` response from any EchoSync API indicates the token is expired or invalid. \n  In this case, request a new token and retry the request.\n\n## Rate Limiting\n\nTo ensure fair usage, maintain service availability, and protect system performance, requests may be subject to rate limiting. \nWhen usage exceeds allowed thresholds, requests can be temporarily throttled or rejected until the limit window resets.\n"}},"baseSlug":"/authorizer-api/openapi","routesMapping":{}}