ToolJet/marketplace/plugins/aftership/openapi-specs/tracking.json
Akshay 8ef5f0682d
Feature: Add QuickBooks Online marketplace plugin (#15903)
* feat: add QuickBooks Online marketplace plugin

Add a QuickBooks Online Accounting API plugin with OAuth2 authentication,
86 API operations via OpenAPI spec, and @spec/ convention for DB-stored
spec files. Includes server-side spec hosting infrastructure and a fix
for duplicate footer rendering on marketplace OAuth2 datasource config pages.

* chore: update submodule pointers

* fix: use parent transaction for spec file DB operations

storeSpecFiles and updateSpecFilesForReload were wrapping each file
insert/update in a separate dbTransactionWrap call, creating independent
transactions instead of participating in the outer install/upgrade
transaction. This could leave orphan File entities if the plugin save
failed. Now uses the parent manager directly.

* fix: use sandbox API URL, remove testConnection, add state param

- Default to sandbox-quickbooks.api.intuit.com (development apps require it)
- Remove testConnection and customTesting (OAuth flow validates connection)
- Add state parameter to auth URL (required by QuickBooks)
- Add access_token validation guard in run()
- Preserve existing refresh_token if provider doesn't reissue
- Remove environment dropdown and company_id from manifest
- Add debug logging for OAuth flow tracing

* Chore: Migrate all OpenAPI plugins from external URLs to @spec/ convention (#15904)

* chore: migrate all OpenAPI plugins from external URLs to @spec/ convention

Downloads 78 OpenAPI spec files from external URLs (7 plugins from
adishM98/base-repo-testing personal repo, 2 from official provider repos,
1 from S3) and stores them locally in openapi-specs/ directories. Updates
all operations.json files to use @spec/<kind>/<name> references, which
are resolved to DB-stored specs at install time.

Eliminates runtime dependency on external GitHub repos for spec rendering.

* chore: remove one-time spec migration script

* POST string body

---------

Co-authored-by: Rudhra Deep Biswas <rudra21ultra@gmail.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>
2026-05-13 09:16:38 +05:30

995 lines
No EOL
29 KiB
JSON

{
"openapi": "3.1.0",
"info": {
"title": "AfterShip Tracking API",
"version": "2024-07",
"description": "AfterShip Tracking API provides programmatic access to shipment tracking information from multiple carriers worldwide.",
"contact": {
"name": "AfterShip Support",
"url": "https://www.aftership.com/contact-us",
"email": "support@aftership.com"
},
"termsOfService": "https://www.aftership.com/terms"
},
"servers": [
{
"url": "https://api.aftership.com/tracking/2024-07",
"description": "Production API Endpoint"
}
],
"security": [
{
"apiKey": []
}
],
"components": {
"securitySchemes": {
"apiKey": {
"type": "apiKey",
"in": "header",
"name": "as-api-key",
"description": "API key for authentication"
}
},
"schemas": {
"Tracking": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Tracking ID"
},
"tracking_number": {
"type": "string",
"description": "Tracking number"
},
"slug": {
"type": "string",
"description": "Courier slug"
},
"active": {
"type": "boolean",
"description": "Whether tracking is active"
},
"tag": {
"type": "string",
"enum": ["Pending", "InfoReceived", "InTransit", "OutForDelivery", "AttemptFail", "Delivered", "AvailableForPickup", "Exception", "Expired"],
"description": "Current status of tracking"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Creation timestamp"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Last update timestamp"
},
"checkpoints": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Checkpoint"
}
}
}
},
"Checkpoint": {
"type": "object",
"properties": {
"created_at": {
"type": "string",
"format": "date-time"
},
"checkpoint_time": {
"type": "string",
"format": "date-time"
},
"message": {
"type": "string"
},
"location": {
"type": "string",
"nullable": true
},
"tag": {
"type": "string"
},
"subtag": {
"type": "string"
}
}
},
"Courier": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"web_url": {
"type": "string",
"format": "uri"
},
"required_fields": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"EstimatedDeliveryDate": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"estimated_delivery_date": {
"type": "string",
"format": "date"
},
"confidence_code": {
"type": "number"
}
}
},
"Error": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
},
"message": {
"type": "string"
},
"type": {
"type": "string"
}
}
}
}
}
}
},
"paths": {
"/trackings": {
"get": {
"summary": "Get trackings",
"description": "Get tracking results of multiple trackings",
"operationId": "get-trackings",
"tags": ["Tracking"],
"parameters": [
{
"name": "page",
"in": "query",
"description": "Page number (default: 1)",
"schema": {
"type": "integer",
"minimum": 1,
"default": 1
}
},
{
"name": "limit",
"in": "query",
"description": "Number of results per page (default: 100, max: 200)",
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 100
}
},
{
"name": "keyword",
"in": "query",
"description": "Search keyword",
"schema": {
"type": "string"
}
},
{
"name": "slug",
"in": "query",
"description": "Courier slug",
"schema": {
"type": "string"
}
},
{
"name": "tag",
"in": "query",
"description": "Tracking status",
"schema": {
"type": "string",
"enum": ["Pending", "InfoReceived", "InTransit", "OutForDelivery", "AttemptFail", "Delivered", "AvailableForPickup", "Exception", "Expired"]
}
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"count": {
"type": "integer"
},
"trackings": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Tracking"
}
}
}
}
}
}
}
}
}
}
},
"post": {
"summary": "Create a tracking",
"description": "Create a new tracking",
"operationId": "create-tracking",
"tags": ["Tracking"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["tracking_number"],
"properties": {
"tracking_number": {
"type": "string",
"description": "Tracking number"
},
"slug": {
"type": "string",
"description": "Courier slug"
},
"title": {
"type": "string",
"description": "Custom title"
},
"order_id": {
"type": "string",
"description": "Order ID"
},
"emails": {
"type": "array",
"items": {
"type": "string",
"format": "email"
},
"description": "Email addresses for notifications"
},
"smses": {
"type": "array",
"items": {
"type": "string"
},
"description": "Phone numbers for SMS notifications"
},
"custom_fields": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Custom fields"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Tracking created successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"$ref": "#/components/schemas/Tracking"
}
}
}
}
}
}
}
}
},
"/trackings/{id}": {
"get": {
"summary": "Get a tracking by ID",
"description": "Get tracking results of a single tracking",
"operationId": "get-tracking-by-id",
"tags": ["Tracking"],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Tracking ID",
"schema": {
"type": "string"
}
},
{
"name": "fields",
"in": "query",
"description": "Fields to include in response",
"schema": {
"type": "string"
}
},
{
"name": "lang",
"in": "query",
"description": "Language for translation",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"$ref": "#/components/schemas/Tracking"
}
}
}
}
}
}
}
},
"put": {
"summary": "Update a tracking by ID",
"description": "Update an existing tracking",
"operationId": "update-tracking-by-id",
"tags": ["Tracking"],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Tracking ID",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"note": {
"type": "string"
},
"emails": {
"type": "array",
"items": {
"type": "string"
}
},
"smses": {
"type": "array",
"items": {
"type": "string"
}
},
"custom_fields": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Tracking updated successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"$ref": "#/components/schemas/Tracking"
}
}
}
}
}
}
}
},
"delete": {
"summary": "Delete a tracking by ID",
"description": "Delete a tracking",
"operationId": "delete-tracking-by-id",
"tags": ["Tracking"],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Tracking ID",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Tracking deleted successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"$ref": "#/components/schemas/Tracking"
}
}
}
}
}
}
}
}
},
"/trackings/{id}/retrack": {
"post": {
"summary": "Retrack an expired tracking by ID",
"description": "Retrack an expired tracking. Max 3 times per tracking",
"operationId": "retrack-tracking-by-id",
"tags": ["Tracking"],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Tracking ID",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Retrack initiated successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"$ref": "#/components/schemas/Tracking"
}
}
}
}
}
}
}
}
},
"/trackings/{id}/mark-as-completed": {
"post": {
"summary": "Mark tracking as completed by ID",
"description": "Mark a tracking as completed. The tracking won't auto update until retrack it",
"operationId": "mark-tracking-completed-by-id",
"tags": ["Tracking"],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Tracking ID",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["reason"],
"properties": {
"reason": {
"type": "string",
"enum": ["DELIVERED", "LOST", "RETURNED_TO_SENDER"],
"description": "Reason for marking as completed"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Tracking marked as completed",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"$ref": "#/components/schemas/Tracking"
}
}
}
}
}
}
}
}
},
"/couriers": {
"get": {
"summary": "Get user activated couriers",
"description": "Return a list of couriers activated at your AfterShip account",
"operationId": "get-user-couriers",
"tags": ["Courier"],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"couriers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Courier"
}
}
}
}
}
}
}
}
}
}
}
},
"/couriers/detect": {
"post": {
"summary": "Detect courier",
"description": "Return a list of matched couriers based on tracking number format",
"operationId": "detect-courier",
"tags": ["Courier"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["tracking_number"],
"properties": {
"tracking_number": {
"type": "string",
"description": "Tracking number"
},
"slug": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of courier slugs for detection"
},
"tracking_postal_code": {
"type": "string"
},
"tracking_ship_date": {
"type": "string"
},
"tracking_account_number": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"couriers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Courier"
}
}
}
}
}
}
}
}
}
}
}
},
"/couriers/all": {
"get": {
"summary": "Get all couriers",
"description": "Return a list of all couriers",
"operationId": "get-all-couriers",
"tags": ["Courier"],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"couriers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Courier"
}
}
}
}
}
}
}
}
}
}
}
},
"/estimated-delivery-date/predict-batch": {
"post": {
"summary": "Batch prediction for the Estimated Delivery Date",
"description": "Use AfterShip's AI-powered predictive estimated delivery date API to provide expected delivery dates",
"operationId": "predict-batch",
"tags": ["Estimated delivery date"],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["estimated_delivery_dates"],
"properties": {
"estimated_delivery_dates": {
"type": "array",
"maxItems": 5,
"minItems": 1,
"items": {
"type": "object",
"required": ["slug", "origin_address", "destination_address"],
"properties": {
"slug": {
"type": "string",
"description": "Courier slug"
},
"service_type_name": {
"type": "string",
"nullable": true,
"description": "Service type name"
},
"origin_address": {
"type": "object",
"required": ["country"],
"properties": {
"country": {
"type": "string"
},
"state": {
"type": "string",
"nullable": true
},
"city": {
"type": "string",
"nullable": true
},
"postal_code": {
"type": "string",
"nullable": true
},
"raw_location": {
"type": "string",
"nullable": true
}
}
},
"destination_address": {
"type": "object",
"required": ["country"],
"properties": {
"country": {
"type": "string"
},
"state": {
"type": "string",
"nullable": true
},
"city": {
"type": "string",
"nullable": true
},
"postal_code": {
"type": "string",
"nullable": true
},
"raw_location": {
"type": "string",
"nullable": true
}
}
},
"weight": {
"type": "object",
"nullable": true,
"properties": {
"unit": {
"type": "string"
},
"value": {
"type": "number"
}
}
},
"package_count": {
"type": "integer",
"nullable": true
},
"pickup_time": {
"type": "string",
"nullable": true
},
"estimated_pickup": {
"type": "object",
"nullable": true,
"properties": {
"order_time": {
"type": "string"
},
"order_cutoff_time": {
"type": "string",
"nullable": true
},
"business_days": {
"type": "array",
"nullable": true,
"items": {
"type": "integer"
}
},
"order_processing_time": {
"type": "object",
"nullable": true,
"properties": {
"unit": {
"type": "string"
},
"value": {
"type": "number"
}
}
}
}
}
}
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"meta": {
"type": "object",
"properties": {
"code": {
"type": "integer"
}
}
},
"data": {
"type": "object",
"properties": {
"estimated_delivery_dates": {
"type": "array",
"items": {
"$ref": "#/components/schemas/EstimatedDeliveryDate"
}
}
}
}
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
}
},
"tags": [
{
"name": "Tracking",
"description": "Tracking operations"
},
{
"name": "Courier",
"description": "Courier operations"
},
{
"name": "Estimated delivery date",
"description": "Estimated delivery date operations"
}
]
}