swagger: '2.0' info: x-logo: url: https://storage.googleapis.com/boxc_cdn/public/boxc-logo.png altText: BoxC title: BoxC CalculateDuty Credentials API version: '1.123' description: 'A simple but powerful logistics API that drives international ecommerce by utilizing a single integration with access to dozens of carriers and global markets. BoxC can complete every leg or only select steps of a shipment''s journey on your behalf with our routing engine. ' schemes: - https tags: - name: Credentials x-displayName: Credentials description: 'The Credentials resource allows users to store their own carrier account secrets securely. This gives users the ability to reuse their credentials without providing actual secret values in every single shipment request. There can be multiple secret values stored in a single credential resource. Supported carriers and parameters can be found in the [Carrier Credentials](/#tag/CarrierCredentials) section. **Note:** All secret params that are stored by BoxC are encrypted at the storage layer using the Advanced Encryption Standard (AES) algorithm — AES-256. **Important:** Once a credential resource is created, it is not possible to see the secret values for security reasons. **Important:** If the secret values have to be updated for any reason, we recommend updating your existing Credential resource instead of creating a new one. Doing so will ensure that secret values are always up to date for previously created labels with the same Credential resource and event tracking is not affected adversely.' paths: /credentials: get: tags: - Credentials summary: GET /credentials description: Retrieves a paginated list of credentials. operationId: getCredentials consumes: - application/json produces: - application/json parameters: - in: query name: limit description: The number of results to return. default: 50 minimum: 50 maximum: 100 required: false type: integer - in: query name: order description: The sort order of the results. default: desc enum: - asc - desc required: false type: string - in: query name: page_token description: Used for selecting the page after the initial query. required: false type: string default: null - in: query name: sort description: The property to sort by. enum: - id - carrier default: id required: false type: string security: - JWT: - read_credentials x-codeSamples: - lang: cURL label: cURL source: "curl -H \"Authorization: Bearer \" \\\n -H \"Accept: application/json\" \\\n https://api.boxc.com/v1/credentials\\?limit=2\\&order=desc\\&sort=id\n" responses: '200': description: OK content: application/json: schema: type: object properties: credentials: type: array items: $ref: '#/definitions/Credential' next_page: type: string description: Page token. Set by the system. example: ZGF0ZV9lbmQ9MjAyMy0wNy0yOCZsaW1pdD01MCZvcmRlcj1kZXNjJnBhZ2U9MSZsYXN0X2lkPTE1Mzg0Nw '400': description: Bad Request content: application/json: schema: $ref: '#/definitions/BadRequest' examples: invalidToken: summary: Bad Request description: Invalid page token value: code: 1025 message: Invalid page token errors: - Invalid page token '401': $ref: '#/definitions/Unauthorized' '403': $ref: '#/definitions/Forbidden' '429': $ref: '#/definitions/RateLimit' post: tags: - Credentials summary: POST /credentials description: Creates a credential. operationId: addCredential consumes: - application/json produces: - application/json security: - JWT: - write_credentials x-codeSamples: - lang: cURL label: cURL source: "curl -X POST https://api.boxc.com/v1/credentials \\\n -H \"Authorization: Bearer \" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"credential\": {\n \"carrier\": \"DeutschePost\",\n \"params\": {\n \"gkp_username\": \"Username\",\n \"gkp_password\": \"Password\",\n \"dp_api_key\": \"TEST\",\n \"dp_api_secret\": \"TEST\",\n \"ekp\": \"1234567890\",\n \"contract_participation\": \"AA\"\n }\n }\n}'\n" requestBody: content: application/json: schema: type: object properties: credential: $ref: '#/definitions/Credential' required: - credential responses: '201': description: Created content: application/json: schema: type: object properties: credential: $ref: '#/definitions/Credential' '400': description: Bad Request content: application/json: schema: $ref: '#/definitions/BadRequest' examples: validation: summary: Validation error description: The request schema is invalid. value: code: 1000 message: 'Validation Error. /credential: The required properties (carrier) are missing' status: error errors: - '/credential: The required properties (carrier) are missing' '401': $ref: '#/definitions/Unauthorized' '403': $ref: '#/definitions/Forbidden' '429': $ref: '#/definitions/RateLimit' '500': description: Internal Server Error content: application/json: schema: $ref: '#/definitions/InternalServerError' examples: internalServerError: summary: Internal Server Error description: Credential could not be created value: code: 1453 message: Credential could not be created errors: - Credential could not be created /credentials/{id}: get: tags: - Credentials summary: GET /credentials/{id} description: Retrieves a credential. operationId: getCredentialsById consumes: - application/json produces: - application/json security: - JWT: - read_credentials parameters: - name: id in: path description: The credential ID required: true type: integer x-codeSamples: - lang: cURL label: cURL source: "curl -H \"Authorization: Bearer \" \\\n -H \"Accept: application/json\" \\\n https://api.boxc.com/v1/credentials/{id}\n" responses: '200': description: OK content: application/json: schema: type: object properties: credential: $ref: '#/definitions/Credential' '401': $ref: '#/definitions/Unauthorized' '403': $ref: '#/definitions/Forbidden' '404': description: Not Found content: application/json: schema: $ref: '#/definitions/NotFound' examples: notFound: summary: Not Found description: Credential not found value: code: 1450 message: Credential not found errors: - Credential not found '429': $ref: '#/definitions/RateLimit' put: tags: - Credentials summary: PUT /credentials/{id} description: Updates a credential. operationId: updateCredential consumes: - application/json produces: - application/json security: - JWT: - write_credentials parameters: - name: id in: path description: The credential ID required: true type: integer x-codeSamples: - lang: cURL label: cURL source: "curl -X PUT https://api.boxc.com/v1/credentials/{id} \\\n -H \"Authorization: Bearer \" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"credential\": {\n \"carrier\": \"DeutschePost\",\n \"params\": {\n \"gkp_username\": \"Username\",\n \"gkp_password\": \"Password\",\n \"dp_api_key\": \"TEST\",\n \"dp_api_secret\": \"TEST\",\n \"ekp\": \"1234567890\",\n \"contract_participation\": \"AA\"\n }\n }\n}'\n" requestBody: content: application/json: schema: $ref: '#/definitions/CredentialPut' responses: '200': description: Success OK. content: application/json: schema: type: object properties: credential: $ref: '#/definitions/Credential' '400': description: Bad Request content: application/json: schema: $ref: '#/definitions/BadRequest' examples: validation: summary: Validation error description: The request schema is invalid. value: code: 1000 message: 'params: Params are not valid' status: error errors: - 'params: Params are not valid' cannotUpdate: summary: Bad Request Credential description: Credential can't be updated value: code: 1451 message: Credential can't be updated errors: - Credential can't be updated cannotChangeCarrier: summary: Bad Request Carrier description: Carrier can't be changed value: code: 1454 message: Carrier can't be changed errors: - Carrier can't be changed '401': $ref: '#/definitions/Unauthorized' '403': $ref: '#/definitions/Forbidden' '404': description: Not Found content: application/json: schema: $ref: '#/definitions/NotFound' examples: notFound: summary: Not Found description: Credential not found value: code: 1450 message: Credential not found errors: - Credential not found '429': $ref: '#/definitions/RateLimit' delete: tags: - Credentials summary: DELETE /credentials/{id} description: Deletes a credential. operationId: deleteCredential consumes: - application/json produces: - application/json security: - JWT: - write_credentials parameters: - name: id in: path description: The credential ID required: true type: integer x-codeSamples: - lang: cURL label: cURL source: "curl -X DELETE https://api.boxc.com/v1/credentials/{id} \\\n -H \"Authorization: Bearer \" \\\n -H \"Content-Type: application/json\"\n" responses: '200': description: OK '401': $ref: '#/definitions/Unauthorized' '403': $ref: '#/definitions/Forbidden' '404': description: Not Found content: application/json: schema: $ref: '#/definitions/NotFound' examples: notFound: summary: Not Found description: Credential not found value: code: 1450 message: Credential not found errors: - Credential not found '429': $ref: '#/definitions/RateLimit' '500': description: Internal Server Error content: application/json: schema: $ref: '#/definitions/InternalServerError' examples: internalServerError: summary: Internal Server Error description: Credential can't be deleted value: code: 1452 message: Credential can't be deleted errors: - Credential can't be deleted definitions: bad-request: type: object summary: Bad Request description: Validation error with the request properties: code: description: Error code. Refer to the list of [Errors](/#tag/Errors). type: integer message: description: Error message explaining the code. type: string status: type: string enum: - error example: error errors: description: Lists validation errors with the schema or the resource being operated on. type: array minItems: 1 maxItems: 5 items: type: string InternalServerError: $ref: '#/definitions/internal-server-error' NotFound: $ref: '#/definitions/not-found' CredentialPut: $ref: '#/definitions/credential-put-request' Credential: $ref: '#/definitions/credential' BadRequest: $ref: '#/definitions/bad-request' unauthorized: description: Unauthorized content: application/json: schema: type: object summary: Unauthorized description: Lack of valid authentication credentials for the resource properties: code: description: Error code. Refer to the list of [Errors](/#tag/Errors). type: integer message: description: Error message explaining the code. type: string status: type: string enum: - error example: error errors: description: Displays processing error. type: array minItems: 1 maxItems: 1 items: type: string examples: accessToken: summary: Invalid access token description: Invalid access token value: code: 1005 message: Invalid access token errors: - Invalid access token not-found: type: object summary: Not Found description: Object not found or not owned by the user properties: code: description: Error code. Refer to the list of [Errors](/#tag/Errors). type: integer message: description: Error message explaining the code. type: string status: type: string enum: - error example: error errors: description: Duplicate of the error message type: array items: type: string internal-server-error: type: object summary: Internal Server Error description: Processing Error properties: code: description: Error code. Refer to the list of [Errors](/#tag/Errors). type: integer message: description: Error message explaining the code. type: string status: type: string enum: - error example: error errors: description: Displays processing error. type: array minItems: 1 maxItems: 1 items: type: string rate-limit: description: Too Many Requests content: application/json: schema: type: object summary: Too Many Requests description: Error for too many requests in a given time frame. See [Rate Limits](/#tag/RateLimit) for more information. properties: code: description: Error code. Refer to the list of [Errors](/#tag/Errors). type: integer message: description: Error message explaining the code. type: string status: type: string enum: - error example: error errors: description: Displays processing error. type: array minItems: 1 maxItems: 1 items: type: string examples: rateLimit: summary: Too Many Requests description: Too many requests. Please wait before trying again. value: code: 1015 message: Too many requests. Please wait before trying again. errors: - Too many requests. Please wait before trying again. Unauthorized: $ref: '#/definitions/unauthorized' Forbidden: $ref: '#/definitions/forbidden' credential-put-request: type: object properties: credential: type: object properties: carrier: description: The carrier code type: string example: DHLeC params: description: The carrier specific parameters. Supported parameters can be found in the [Carrier Credentials](/#tag/CarrierCredentials) section. type: object example: client_id: 1223asdadaa12 client_secret: '12312312312312' required: - carrier - params required: - credential RateLimit: $ref: '#/definitions/rate-limit' forbidden: description: Forbidden content: application/json: schema: type: object summary: Forbidden description: Error relating to insufficient permissions for a resource properties: code: description: Error code. Refer to the list of [Errors](/#tag/Errors). type: integer message: description: Error message explaining the code. type: string status: type: string enum: - error example: error errors: description: Displays processing error. type: array minItems: 1 maxItems: 1 items: type: string examples: revoked: summary: Forbidden Authorization Revoked description: 'Forbidden: Authorization revoked' value: code: 1008 message: 'Forbidden: Authorization revoked' errors: - 'Forbidden: Authorization revoked' scope: summary: Forbidden Scope description: 'Forbidden: Missing required scope' value: code: 1009 message: 'Forbidden: Missing required scope' errors: - 'Forbidden: Missing required scope' credential: type: object properties: id: description: The credential ID. type: integer example: 100020 readOnly: true user_id: description: The user ID. type: integer example: 12006 readOnly: true carrier: description: The carrier for this credential. Carriers that support parameters can be found in the [Carrier Credentials](/#tag/CarrierCredentials) section. type: string example: DeutschePost params: description: The carrier specific parameters. Supported parameters can be found in the [Carrier Credentials](/#tag/CarrierCredentials) section. type: object updated: description: The datetime in UTC the credential was updated. type: string format: datetime example: '2024-06-01 19:04:51' readOnly: true created: description: The datetime in UTC the credential was created. type: string format: datetime example: '2024-05-20 10:11:12' readOnly: true deleted: description: The datetime in UTC the credential was deleted. type: string format: datetime example: '2024-06-20 04:22:18' readOnly: true required: - carrier - params securityDefinitions: JWT: type: http scheme: bearer bearerScheme: JWT in: header description: All operations require a JSON Web Token after completing an [OAuth2 flow](#tag/Authentication). PrivilegedClient: type: http scheme: bearer bearerScheme: JWT description: Some clients require special privileges to use operations. No additional scope is needed. x-servers: - url: https://api.boxc.com/v1 x-tagGroups: - name: Overview tags: - Introduction - Authentication - RateLimit - Paginate - Changelog - name: Operations tags: - CalculateDuty - Classify - Invoices - Users - ValidateAddress - Webhooks - name: Shipping tags: - Credentials - CustomsProducts - EntryPoints - Estimate - Labels - Manifests - Overpacks - Shipments - Track - name: Fulfillment tags: - Inbound - Orders - Products - Shops - Warehouses - name: Returns tags: - Reshipments - Returns - name: Data tags: - CarrierCredentials - DangerousGoods - Errors - Languages - CarrierParameters - ReturnsProcess - TrackingEvents