From f85e584b792a1a26be3ee56aeb155e8e898522c7 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 31 Jul 2025 14:24:41 +0100 Subject: [PATCH 1/7] DOCS-1313 Add Paxos Identity API specification and update documentation (#55) --- .../paxos-v2-preview-identity.openapi.json | 1142 +++++++++++++++++ docs.json | 7 + 2 files changed, 1149 insertions(+) create mode 100644 api-reference/preview/paxos-v2-preview-identity.openapi.json diff --git a/api-reference/preview/paxos-v2-preview-identity.openapi.json b/api-reference/preview/paxos-v2-preview-identity.openapi.json new file mode 100644 index 0000000..82219a5 --- /dev/null +++ b/api-reference/preview/paxos-v2-preview-identity.openapi.json @@ -0,0 +1,1142 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Paxos Identity API", + "version": "v2-preview" + }, + "security": [ + { + "OAuth2": ["identity:read_identity", "identity:write_identity"] + } + ], + "paths": { + "/v2/identity/identities": { + "get": { + "summary": "List Identities", + "description": "Fetch a list of Identities according to the given filters.\n\nResults can be paginated using the next_page_cursor.\nThe maximum page size is 100.", + "operationId": "ListIdentities", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListIdentitiesResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_bad_request" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_unauthenticated" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_forbidden" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_too_many_requests" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_internal_server_error" + } + } + } + } + }, + "parameters": [ + { + "name": "summary_status", + "description": "Optionally filter by summary status.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": ["PENDING", "ERROR", "APPROVED", "DENIED", "DISABLED"] + } + } + }, + { + "name": "identity_type", + "description": "Optionally filter by identity type.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": ["PERSON", "INSTITUTION"] + } + } + }, + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to gte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.gte", + "description": "Include timestamps greater than or equal to gte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided. Maximum 100.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Sort order for the results. Defaults to DESC by created_at time.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": ["DESC", "ASC"] + } + }, + { + "name": "order_by", + "description": "Field to sort by. Defaults to created_at.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": ["created_at", "updated_at"] + } + }, + { + "name": "page_cursor", + "description": "Optional cursor for getting the next page of results.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": ["Identities"], + "security": [ + { + "OAuth2": ["identity:read_identity"] + } + ] + }, + "post": { + "summary": "Create Identity", + "description": "Creates a new Person or Institution Identity. An Identity starts in a `PENDING` status and will transition to `APPROVED`, `DENIED`, or stay in `PENDING` after Paxos' compliance review.\n\nFor sandbox environments, you can control the identity status using the sandbox set identity status endpoint.", + "operationId": "CreateIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_bad_request" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_unauthenticated" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_forbidden" + } + } + } + }, + "409": { + "description": "Already Exists", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_already_exists" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_too_many_requests" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_internal_server_error" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateIdentityRequest" + } + } + }, + "required": true + }, + "tags": ["Identities"], + "security": [ + { + "OAuth2": ["identity:write_identity"] + } + ] + } + }, + "/v2/identity/identities/{id}": { + "get": { + "summary": "Get Identity", + "description": "Get an Identity by ID.", + "operationId": "GetIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_bad_request" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_unauthenticated" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_forbidden" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_not_found" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_too_many_requests" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_internal_server_error" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The Identity ID", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "include_details", + "description": "Include encrypted person/institution details in the response.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "include_institution_members", + "description": "Include institution members in the response (only applicable for institution identities).", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": ["Identities"], + "security": [ + { + "OAuth2": ["identity:read_identity"] + } + ] + }, + "put": { + "summary": "Update Identity", + "description": "Update an Identity. This endpoint performs delta updates - only the fields that are provided will be updated.\n\nYou can use this endpoint to:\n- Trigger KYC refresh for identities\n- Disable an identity\n- Update identity details", + "operationId": "UpdateIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_bad_request" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_unauthenticated" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_forbidden" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_not_found" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_too_many_requests" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_internal_server_error" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The Identity ID", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateIdentityRequest" + } + } + }, + "required": true + }, + "tags": ["Identities"], + "security": [ + { + "OAuth2": ["identity:write_identity"] + } + ] + } + } + }, + "components": { + "securitySchemes": { + "OAuth2": { + "type": "oauth2", + "flows": { + "clientCredentials": { + "tokenUrl": "https://oauth.paxos.com/oauth2/token", + "scopes": { + "identity:read_identity": "Read identity data", + "identity:write_identity": "Create and manage identities" + } + } + } + } + }, + "schemas": { + "ListIdentitiesResponse": { + "type": "object", + "properties": { + "identities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Identity" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "Identity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier for the identity" + }, + "customer_id": { + "type": "string", + "description": "The customer ID associated with this identity" + }, + "ref_id": { + "type": "string", + "description": "External reference ID provided by the client" + }, + "identity_type": { + "type": "string", + "enum": ["PERSON", "INSTITUTION"], + "description": "The type of identity" + }, + "summary_status": { + "type": "string", + "enum": ["PENDING", "ERROR", "APPROVED", "DENIED", "DISABLED"], + "description": "Overall status of the identity verification" + }, + "person_details": { + "$ref": "#/components/schemas/PersonDetails" + }, + "institution_details": { + "$ref": "#/components/schemas/InstitutionDetails" + }, + "tax_details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaxDetail" + } + }, + "customer_due_diligence": { + "$ref": "#/components/schemas/CustomerDueDiligence" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "CreateIdentityRequest": { + "type": "object", + "properties": { + "customer_id": { + "type": "string", + "description": "The customer ID to associate with this identity" + }, + "ref_id": { + "type": "string", + "description": "External reference ID for idempotency" + }, + "identity_type": { + "type": "string", + "enum": ["PERSON", "INSTITUTION"], + "description": "The type of identity to create" + }, + "person_details": { + "$ref": "#/components/schemas/PersonDetailsInput" + }, + "institution_details": { + "$ref": "#/components/schemas/InstitutionDetailsInput" + }, + "tax_details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaxDetailInput" + } + }, + "customer_due_diligence": { + "$ref": "#/components/schemas/CustomerDueDiligenceInput" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "UpdateIdentityRequest": { + "type": "object", + "properties": { + "trigger_kyc_refresh": { + "type": "boolean", + "description": "Trigger a KYC refresh for this identity" + }, + "disable": { + "type": "boolean", + "description": "Disable this identity" + }, + "person_details": { + "$ref": "#/components/schemas/PersonDetailsInput" + }, + "institution_details": { + "$ref": "#/components/schemas/InstitutionDetailsInput" + }, + "tax_details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaxDetailInput" + } + }, + "customer_due_diligence": { + "$ref": "#/components/schemas/CustomerDueDiligenceInput" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "PersonDetails": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "middle_name": { + "type": "string" + }, + "date_of_birth": { + "type": "string", + "format": "date" + }, + "address": { + "$ref": "#/components/schemas/Address" + }, + "email_address": { + "type": "string" + }, + "phone_number": { + "type": "string" + }, + "country_of_citizenship": { + "type": "string" + }, + "country_of_birth": { + "type": "string" + }, + "ssn": { + "type": "string" + }, + "occupation": { + "type": "string" + }, + "identity_verification_status": { + "type": "string", + "enum": ["PENDING", "APPROVED", "DENIED", "ERROR"] + }, + "aml_screening_status": { + "type": "string", + "enum": ["PENDING", "APPROVED", "DENIED", "ERROR"] + } + } + }, + "PersonDetailsInput": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "middle_name": { + "type": "string" + }, + "date_of_birth": { + "type": "string", + "format": "date" + }, + "address": { + "$ref": "#/components/schemas/AddressInput" + }, + "email_address": { + "type": "string" + }, + "phone_number": { + "type": "string" + }, + "country_of_citizenship": { + "type": "string" + }, + "country_of_birth": { + "type": "string" + }, + "ssn": { + "type": "string" + }, + "occupation": { + "type": "string" + } + } + }, + "InstitutionDetails": { + "type": "object", + "properties": { + "legal_name": { + "type": "string" + }, + "doing_business_as_name": { + "type": "string" + }, + "address": { + "$ref": "#/components/schemas/Address" + }, + "incorporation_date": { + "type": "string", + "format": "date" + }, + "country_of_formation": { + "type": "string" + }, + "industry_type": { + "type": "string" + }, + "legal_entity_type": { + "type": "string" + }, + "website": { + "type": "string" + }, + "business_description": { + "type": "string" + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InstitutionMember" + } + }, + "identity_verification_status": { + "type": "string", + "enum": ["PENDING", "APPROVED", "DENIED", "ERROR"] + }, + "aml_screening_status": { + "type": "string", + "enum": ["PENDING", "APPROVED", "DENIED", "ERROR"] + } + } + }, + "InstitutionDetailsInput": { + "type": "object", + "properties": { + "legal_name": { + "type": "string" + }, + "doing_business_as_name": { + "type": "string" + }, + "address": { + "$ref": "#/components/schemas/AddressInput" + }, + "incorporation_date": { + "type": "string", + "format": "date" + }, + "country_of_formation": { + "type": "string" + }, + "industry_type": { + "type": "string" + }, + "legal_entity_type": { + "type": "string" + }, + "website": { + "type": "string" + }, + "business_description": { + "type": "string" + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InstitutionMemberInput" + } + } + } + }, + "InstitutionMember": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "ownership_percentage": { + "type": "number" + }, + "date_of_birth": { + "type": "string", + "format": "date" + }, + "address": { + "$ref": "#/components/schemas/Address" + }, + "ssn": { + "type": "string" + }, + "is_control_person": { + "type": "boolean" + } + } + }, + "InstitutionMemberInput": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "ownership_percentage": { + "type": "number" + }, + "date_of_birth": { + "type": "string", + "format": "date" + }, + "address": { + "$ref": "#/components/schemas/AddressInput" + }, + "ssn": { + "type": "string" + }, + "is_control_person": { + "type": "boolean" + } + } + }, + "Address": { + "type": "object", + "properties": { + "street_address": { + "type": "string" + }, + "street_address_2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "country": { + "type": "string" + } + } + }, + "AddressInput": { + "type": "object", + "properties": { + "street_address": { + "type": "string" + }, + "street_address_2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "country": { + "type": "string" + } + } + }, + "TaxDetail": { + "type": "object", + "properties": { + "tax_id": { + "type": "string" + }, + "tax_id_type": { + "type": "string", + "enum": ["SSN", "EIN", "ITIN"] + }, + "country": { + "type": "string" + }, + "verification_status": { + "type": "string", + "enum": ["PENDING", "APPROVED", "DENIED", "ERROR"] + } + } + }, + "TaxDetailInput": { + "type": "object", + "properties": { + "tax_id": { + "type": "string" + }, + "tax_id_type": { + "type": "string", + "enum": ["SSN", "EIN", "ITIN"] + }, + "country": { + "type": "string" + } + } + }, + "CustomerDueDiligence": { + "type": "object", + "properties": { + "source_of_funds": { + "type": "string" + }, + "purpose_of_account": { + "type": "string" + }, + "expected_activity_level": { + "type": "string", + "enum": ["LOW", "MEDIUM", "HIGH"] + }, + "verification_status": { + "type": "string", + "enum": ["PENDING", "APPROVED", "DENIED", "ERROR"] + } + } + }, + "CustomerDueDiligenceInput": { + "type": "object", + "properties": { + "source_of_funds": { + "type": "string" + }, + "purpose_of_account": { + "type": "string" + }, + "expected_activity_level": { + "type": "string", + "enum": ["LOW", "MEDIUM", "HIGH"] + } + } + } + }, + "examples": { + "Problem_bad_request": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "Invalid request format or missing required fields" + } + }, + "Problem_unauthenticated": { + "value": { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "no authorization header set" + } + }, + "Problem_forbidden": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "user account is disabled" + } + }, + "Problem_not_found": { + "value": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "identity not found" + } + }, + "Problem_already_exists": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "identity already exists with ref_id 'already_used_ref_id'", + "meta": { + "existing": { + "id": "54385e67-d7ef-40d1-b488-ceda6dd9b264", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "ref_id": "already_used_ref_id", + "identity_type": "PERSON", + "summary_status": "PENDING" + } + } + } + }, + "Problem_too_many_requests": { + "value": { + "type": "about:blank", + "title": "Too Many Requests", + "status": 429, + "detail": "Too many requests" + } + }, + "Problem_internal_server_error": { + "value": { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500 + } + } + } + } +} \ No newline at end of file diff --git a/docs.json b/docs.json index 42787cb..6ed7951 100644 --- a/docs.json +++ b/docs.json @@ -809,6 +809,13 @@ "source": "api-reference/preview/paxos-v2-preview-orchestration.openapi.json", "directory": "api-reference/preview" } + }, + { + "group": "Identity Previews", + "openapi": { + "source": "api-reference/preview/paxos-v2-preview-identity.openapi.json", + "directory": "api-reference/preview" + } } ] }, From 76f3aa9d4b371b73d923faf9b899042a4be4d23d Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 31 Jul 2025 14:35:16 +0100 Subject: [PATCH 2/7] Update Paxos Identity API specification: rename 'summary_status' to 'status', add 'status_details' schema, and introduce new 'IdentityStatusDetails', 'PendingVerifications', and 'VerificationStatus' objects for enhanced status information. --- .../paxos-v2-preview-identity.openapi.json | 62 +++++++++++++++++-- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/api-reference/preview/paxos-v2-preview-identity.openapi.json b/api-reference/preview/paxos-v2-preview-identity.openapi.json index 82219a5..a99c12f 100644 --- a/api-reference/preview/paxos-v2-preview-identity.openapi.json +++ b/api-reference/preview/paxos-v2-preview-identity.openapi.json @@ -79,8 +79,8 @@ }, "parameters": [ { - "name": "summary_status", - "description": "Optionally filter by summary status.", + "name": "status", + "description": "Optionally filter by status.", "in": "query", "required": false, "explode": true, @@ -616,11 +616,15 @@ "enum": ["PERSON", "INSTITUTION"], "description": "The type of identity" }, - "summary_status": { + "status": { "type": "string", "enum": ["PENDING", "ERROR", "APPROVED", "DENIED", "DISABLED"], "description": "Overall status of the identity verification" }, + "status_details": { + "$ref": "#/components/schemas/IdentityStatusDetails", + "description": "Detailed status information including verification statuses" + }, "person_details": { "$ref": "#/components/schemas/PersonDetails" }, @@ -1070,6 +1074,56 @@ "enum": ["LOW", "MEDIUM", "HIGH"] } } + }, + "IdentityStatusDetails": { + "type": "object", + "properties": { + "pending_verifications": { + "$ref": "#/components/schemas/PendingVerifications" + } + } + }, + "PendingVerifications": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Human-readable message about pending verifications" + }, + "metadata": { + "$ref": "#/components/schemas/PendingVerificationsMetadata" + } + } + }, + "PendingVerificationsMetadata": { + "type": "object", + "properties": { + "verification_statuses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VerificationStatus" + } + } + } + }, + "VerificationStatus": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the verification" + }, + "type": { + "type": "string", + "enum": ["IDV", "AML", "TAX", "CDD"], + "description": "Type of verification" + }, + "status": { + "type": "string", + "enum": ["PENDING", "APPROVED", "DENIED", "ERROR"], + "description": "Status of this specific verification" + } + } } }, "examples": { @@ -1117,7 +1171,7 @@ "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", "ref_id": "already_used_ref_id", "identity_type": "PERSON", - "summary_status": "PENDING" + "status": "PENDING" } } } From 122766b71be6752cfe3e131aad0c37645074c10d Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 31 Jul 2025 15:02:40 +0100 Subject: [PATCH 3/7] Add new endpoints for identity management in Paxos API: freeze, close, and set dormant states, along with corresponding response schemas and control settings. Enhance identity controls with available actions and update documentation for clarity. --- .../paxos-v2-preview-identity.openapi.json | 394 ++++++++++++++++++ 1 file changed, 394 insertions(+) diff --git a/api-reference/preview/paxos-v2-preview-identity.openapi.json b/api-reference/preview/paxos-v2-preview-identity.openapi.json index a99c12f..96127a7 100644 --- a/api-reference/preview/paxos-v2-preview-identity.openapi.json +++ b/api-reference/preview/paxos-v2-preview-identity.openapi.json @@ -564,6 +564,264 @@ } ] } + }, + "/v2/identity/identities/{id}/freeze": { + "put": { + "summary": "Freeze Identity", + "description": "Freeze an identity to temporarily restrict all actions. Frozen identities cannot perform any operations until unfrozen.", + "operationId": "FreezeIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + }, + "parameters": [ + { + "name": "id", + "description": "The Identity ID", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": ["Identity Controls"], + "security": [ + { + "OAuth2": ["identity:write_identity"] + } + ] + } + }, + "/v2/identity/identities/{id}/close": { + "put": { + "summary": "Close Identity", + "description": "Permanently close an identity. Closed identities cannot be reopened and all actions are permanently restricted.", + "operationId": "CloseIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + }, + "parameters": [ + { + "name": "id", + "description": "The Identity ID", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CloseIdentityRequest" + } + } + }, + "required": false + }, + "tags": ["Identity Controls"], + "security": [ + { + "OAuth2": ["identity:write_identity"] + } + ] + } + }, + "/v2/identity/identities/{id}/dormant": { + "put": { + "summary": "Set Identity Dormant", + "description": "Mark an identity as dormant. Dormant identities have limited functionality and may require reactivation before full operations can resume.", + "operationId": "SetIdentityDormant", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + }, + "parameters": [ + { + "name": "id", + "description": "The Identity ID", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": ["Identity Controls"], + "security": [ + { + "OAuth2": ["identity:write_identity"] + } + ] + } + }, + "/v2/identity/identities/{id}/controls": { + "get": { + "summary": "Get Identity Controls", + "description": "Get the current control settings and available actions for an identity.", + "operationId": "GetIdentityControls", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentityControls" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + }, + "parameters": [ + { + "name": "id", + "description": "The Identity ID", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": ["Identity Controls"], + "security": [ + { + "OAuth2": ["identity:read_identity"] + } + ] + }, + "put": { + "summary": "Update Identity Controls", + "description": "Update control settings for an identity including frozen, dormant, and closed states.", + "operationId": "UpdateIdentityControls", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentityControls" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + }, + "parameters": [ + { + "name": "id", + "description": "The Identity ID", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateIdentityControlsRequest" + } + } + }, + "required": true + }, + "tags": ["Identity Controls"], + "security": [ + { + "OAuth2": ["identity:write_identity"] + } + ] + } } }, "components": { @@ -581,6 +839,48 @@ } } }, + "responses": { + "BadRequest": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_bad_request" + } + } + } + }, + "Unauthorized": { + "description": "Unauthorized", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_unauthenticated" + } + } + } + }, + "Forbidden": { + "description": "Forbidden", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_forbidden" + } + } + } + }, + "NotFound": { + "description": "Not Found", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_not_found" + } + } + } + } + }, "schemas": { "ListIdentitiesResponse": { "type": "object", @@ -1078,6 +1378,14 @@ "IdentityStatusDetails": { "type": "object", "properties": { + "available_actions": { + "type": "array", + "items": { + "type": "string", + "enum": ["CRYPTO_WITHDRAWAL", "CRYPTO_DEPOSITS", "FIAT_WITHDRAWAL", "FIAT_DEPOSITS", "CONVERSION", "TRADING", "SETTLEMENT"] + }, + "description": "List of actions currently available for this identity" + }, "pending_verifications": { "$ref": "#/components/schemas/PendingVerifications" } @@ -1124,6 +1432,92 @@ "description": "Status of this specific verification" } } + }, + "IdentityControls": { + "type": "object", + "properties": { + "available_actions": { + "type": "array", + "items": { + "type": "string", + "enum": ["CRYPTO_WITHDRAWAL", "CRYPTO_DEPOSITS", "FIAT_WITHDRAWAL", "FIAT_DEPOSITS", "CONVERSION", "TRADING", "SETTLEMENT"] + }, + "description": "List of actions currently available for this identity" + }, + "dormant": { + "type": "boolean", + "description": "Whether the identity is marked as dormant" + }, + "frozen": { + "type": "boolean", + "description": "Whether the identity is frozen" + }, + "closed": { + "type": "boolean", + "description": "Whether the identity is permanently closed" + }, + "paxos_controls": { + "$ref": "#/components/schemas/PaxosControls", + "description": "Controls applied by Paxos for regulatory or risk management purposes" + } + } + }, + "PaxosControls": { + "type": "object", + "properties": { + "dormant": { + "type": "boolean", + "description": "Whether Paxos has marked the identity as dormant" + }, + "frozen": { + "type": "boolean", + "description": "Whether Paxos has frozen the identity" + }, + "closed": { + "type": "boolean", + "description": "Whether Paxos has closed the identity" + }, + "closure_reason": { + "type": "array", + "items": { + "type": "string", + "enum": ["REGULATORY_COMPLIANCE", "RISK_MANAGEMENT", "CUSTOMER_REQUEST", "ACCOUNT_VIOLATION", "SUSPICIOUS_ACTIVITY"] + }, + "description": "Reasons for closure if the identity is closed" + } + } + }, + "UpdateIdentityControlsRequest": { + "type": "object", + "properties": { + "frozen": { + "type": "boolean", + "description": "Set the frozen status of the identity" + }, + "dormant": { + "type": "boolean", + "description": "Set the dormant status of the identity" + }, + "closed": { + "type": "boolean", + "description": "Close the identity permanently (cannot be undone)" + }, + "closure_reason": { + "type": "string", + "enum": ["REGULATORY_COMPLIANCE", "RISK_MANAGEMENT", "CUSTOMER_REQUEST", "ACCOUNT_VIOLATION", "SUSPICIOUS_ACTIVITY"], + "description": "Reason for closing the identity (required if closed=true)" + } + } + }, + "CloseIdentityRequest": { + "type": "object", + "properties": { + "closure_reason": { + "type": "string", + "enum": ["REGULATORY_COMPLIANCE", "RISK_MANAGEMENT", "CUSTOMER_REQUEST", "ACCOUNT_VIOLATION", "SUSPICIOUS_ACTIVITY"], + "description": "Reason for closing the identity" + } + } } }, "examples": { From b66c174fe53c0f0d5ec7920ecc7b241d71e5524b Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 31 Jul 2025 16:44:26 +0100 Subject: [PATCH 4/7] Add new endpoint to list identity controls in Paxos API, including detailed filtering options and response schema. Update existing identity management endpoints with clearer descriptions and request body specifications. Enhance identity control structures with additional properties for better clarity and functionality. --- .../paxos-v2-preview-identity.openapi.json | 581 +++++++++++++++--- 1 file changed, 510 insertions(+), 71 deletions(-) diff --git a/api-reference/preview/paxos-v2-preview-identity.openapi.json b/api-reference/preview/paxos-v2-preview-identity.openapi.json index 96127a7..f2e3947 100644 --- a/api-reference/preview/paxos-v2-preview-identity.openapi.json +++ b/api-reference/preview/paxos-v2-preview-identity.openapi.json @@ -565,10 +565,130 @@ ] } }, + "/v2/identity/identities/controls": { + "get": { + "summary": "List Identity Controls", + "description": "List control settings and available actions for multiple identities. Results can be filtered by control states and paginated.", + "operationId": "ListIdentityControls", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListIdentityControlsResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "429": { + "$ref": "#/components/responses/TooManyRequests" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "parameters": [ + { + "name": "identity_ids", + "description": "Filter by specific identity IDs. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "frozen", + "description": "Filter by frozen status.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "dormant", + "description": "Filter by dormant status.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "closed", + "description": "Filter by closed status.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "denied", + "description": "Filter by denied status.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided. Maximum 100.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Sort order for the results. Defaults to DESC by created_at time.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": ["DESC", "ASC"] + } + }, + { + "name": "page_cursor", + "description": "Optional cursor for getting the next page of results.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": ["Identity Controls"], + "security": [ + { + "OAuth2": ["identity:read_identity"] + } + ] + } + }, "/v2/identity/identities/{id}/freeze": { "put": { "summary": "Freeze Identity", - "description": "Freeze an identity to temporarily restrict all actions. Frozen identities cannot perform any operations until unfrozen.", + "description": "Freeze an APPROVED identity to temporarily restrict all actions. Frozen identities cannot perform any operations until unfrozen. This action is mutually exclusive with deny, dormant, and close states.", "operationId": "FreezeIdentity", "responses": { "200": { @@ -605,7 +725,17 @@ } } ], - "tags": ["Identity Controls"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FreezeIdentityRequest" + } + } + }, + "required": false + }, + "tags": ["Identities"], "security": [ { "OAuth2": ["identity:write_identity"] @@ -616,7 +746,7 @@ "/v2/identity/identities/{id}/close": { "put": { "summary": "Close Identity", - "description": "Permanently close an identity. Closed identities cannot be reopened and all actions are permanently restricted.", + "description": "Permanently close an APPROVED identity. Closed identities cannot be reopened and all actions are permanently restricted. This action is mutually exclusive with deny, freeze, and dormant states.", "operationId": "CloseIdentity", "responses": { "200": { @@ -663,7 +793,7 @@ }, "required": false }, - "tags": ["Identity Controls"], + "tags": ["Identities"], "security": [ { "OAuth2": ["identity:write_identity"] @@ -673,8 +803,8 @@ }, "/v2/identity/identities/{id}/dormant": { "put": { - "summary": "Set Identity Dormant", - "description": "Mark an identity as dormant. Dormant identities have limited functionality and may require reactivation before full operations can resume.", + "summary": "Mark Dormant Identity", + "description": "Mark an APPROVED identity as dormant. Dormant identities have limited functionality and may require reactivation before full operations can resume. This action is mutually exclusive with deny, freeze, and close states.", "operationId": "SetIdentityDormant", "responses": { "200": { @@ -711,7 +841,75 @@ } } ], - "tags": ["Identity Controls"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DormantIdentityRequest" + } + } + }, + "required": false + }, + "tags": ["Identities"], + "security": [ + { + "OAuth2": ["identity:write_identity"] + } + ] + } + }, + "/v2/identity/identities/{id}/deny": { + "put": { + "summary": "Deny Identity", + "description": "Deny a PENDING identity, preventing approval and restricting all operations. Denied identities cannot perform any actions and may require resubmission of verification documents. This action is mutually exclusive with freeze, dormant, and close states.", + "operationId": "DenyIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + }, + "parameters": [ + { + "name": "id", + "description": "The Identity ID", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DenyIdentityRequest" + } + } + }, + "required": false + }, + "tags": ["Identities"], "security": [ { "OAuth2": ["identity:write_identity"] @@ -879,6 +1077,26 @@ } } } + }, + "TooManyRequests": { + "description": "Too Many Requests", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_too_many_requests" + } + } + } + }, + "InternalServerError": { + "description": "Internal Server Error", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/examples/Problem_internal_server_error" + } + } + } } }, "schemas": { @@ -896,6 +1114,20 @@ } } }, + "ListIdentityControlsResponse": { + "type": "object", + "properties": { + "identity_controls": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentityControlsItem" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, "Identity": { "type": "object", "properties": { @@ -953,6 +1185,10 @@ "additionalProperties": { "type": "string" } + }, + "controls": { + "$ref": "#/components/schemas/IdentityControls", + "description": "Current control state and action restrictions applied to this identity" } } }, @@ -998,34 +1234,48 @@ "UpdateIdentityRequest": { "type": "object", "properties": { - "trigger_kyc_refresh": { - "type": "boolean", - "description": "Trigger a KYC refresh for this identity" - }, - "disable": { - "type": "boolean", - "description": "Disable this identity" - }, "person_details": { "$ref": "#/components/schemas/PersonDetailsInput" }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "controls": { + "$ref": "#/components/schemas/UpdateIdentityControlsRequest", + "description": "User-initiated control actions including freeze, dormant status, closure, and available action restrictions" + }, "institution_details": { "$ref": "#/components/schemas/InstitutionDetailsInput" }, + "ref_id": { + "type": "string", + "description": "A user-facing ID to prevent duplicate identity creation. Unique for all identities created by the same API user." + }, "tax_details": { "type": "array", "items": { "$ref": "#/components/schemas/TaxDetailInput" - } + }, + "description": "List of tax details associated with the identity" + }, + "set_tax_details_not_required": { + "type": "boolean", + "description": "Set to true if tax details are not legally required." }, "customer_due_diligence": { "$ref": "#/components/schemas/CustomerDueDiligenceInput" }, - "metadata": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "is_merchant": { + "type": "boolean", + "description": "Set to true to indicate that this identity is a merchant." + }, + "last_kyc_refresh_date": { + "type": "string", + "format": "date-time", + "description": "Set to the timestamp the identity has last undergone a periodic kyc refresh. If unset, the update is not for periodic kyc refresh. RFC3339 format, like YYYY-MM-DDTHH:MM:SS.sssZ. ex: 2006-01-02T15:04:05Z." } } }, @@ -1378,58 +1628,198 @@ "IdentityStatusDetails": { "type": "object", "properties": { - "available_actions": { - "type": "array", - "items": { - "type": "string", - "enum": ["CRYPTO_WITHDRAWAL", "CRYPTO_DEPOSITS", "FIAT_WITHDRAWAL", "FIAT_DEPOSITS", "CONVERSION", "TRADING", "SETTLEMENT"] - }, - "description": "List of actions currently available for this identity" - }, "pending_verifications": { - "$ref": "#/components/schemas/PendingVerifications" + "$ref": "#/components/schemas/PendingVerificationsDetail", + "description": "Available when status is PENDING" + }, + "pending_edd": { + "$ref": "#/components/schemas/PendingEddDetail", + "description": "Available when status is PENDING" + }, + "pending_member_approvals": { + "$ref": "#/components/schemas/PendingMemberApprovalsDetail", + "description": "Available when status is PENDING for institutions" + }, + "failed_verifications": { + "$ref": "#/components/schemas/FailedVerificationsDetail", + "description": "Available when status is DENIED or DISABLED" + }, + "prohibited_risk_rating": { + "$ref": "#/components/schemas/ProhibitedRiskRatingDetail", + "description": "Available when status is DENIED or DISABLED" + }, + "failed_controls": { + "$ref": "#/components/schemas/FailedControlsDetail", + "description": "Available when status is DENIED or DISABLED" + }, + "failed_members": { + "$ref": "#/components/schemas/FailedMembersDetail", + "description": "Available when status is DISABLED for institutions" } - } + }, + "description": "Detailed status information with nested message/metadata structure for each status type" }, - "PendingVerifications": { + "PendingVerificationsDetail": { "type": "object", + "required": ["message"], "properties": { "message": { "type": "string", "description": "Human-readable message about pending verifications" }, "metadata": { - "$ref": "#/components/schemas/PendingVerificationsMetadata" + "type": "object", + "properties": { + "statuses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["IDV", "AML", "TAX", "CDD", "SANCTIONS", "PEP", "ADVERSE_MEDIA"] + }, + "status": { + "type": "string", + "enum": ["PENDING"] + } + } + } + } + }, + "description": "Optional structured data - only included when there are specific verification statuses to report" } } }, - "PendingVerificationsMetadata": { + "PendingEddDetail": { "type": "object", + "required": ["message"], "properties": { - "verification_statuses": { - "type": "array", - "items": { - "$ref": "#/components/schemas/VerificationStatus" - } + "message": { + "type": "string", + "description": "Human-readable message about pending EDD" } } }, - "VerificationStatus": { + "PendingMemberApprovalsDetail": { "type": "object", + "required": ["message"], "properties": { - "id": { + "message": { "type": "string", - "description": "Unique identifier for the verification" + "description": "Human-readable message about pending member approvals" }, - "type": { + "metadata": { + "type": "object", + "properties": { + "pending_members": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Optional structured data - only included when there are specific member approval details to report" + } + } + }, + "FailedVerificationsDetail": { + "type": "object", + "required": ["message"], + "properties": { + "message": { "type": "string", - "enum": ["IDV", "AML", "TAX", "CDD"], - "description": "Type of verification" + "description": "Human-readable message about failed verifications" }, - "status": { + "metadata": { + "type": "object", + "properties": { + "statuses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["IDV", "AML", "TAX", "CDD", "SANCTIONS", "PEP", "ADVERSE_MEDIA"] + }, + "status": { + "type": "string", + "enum": ["FAILED", "DENIED"] + } + } + } + } + }, + "description": "Optional structured data - only included when there are specific verification failure details to report" + } + } + }, + "ProhibitedRiskRatingDetail": { + "type": "object", + "required": ["message"], + "properties": { + "message": { "type": "string", - "enum": ["PENDING", "APPROVED", "DENIED", "ERROR"], - "description": "Status of this specific verification" + "description": "Human-readable message about prohibited risk rating" + } + } + }, + "FailedControlsDetail": { + "type": "object", + "required": ["message"], + "properties": { + "message": { + "type": "string", + "description": "Human-readable message about failed controls" + }, + "metadata": { + "type": "object", + "properties": { + "dormant": { + "type": "boolean", + "description": "Whether the identity is marked as dormant" + }, + "frozen": { + "type": "boolean", + "description": "Whether the identity is frozen" + }, + "closed": { + "type": "boolean", + "description": "Whether the identity is permanently closed" + }, + "denied": { + "type": "boolean", + "description": "Whether the identity has been denied" + }, + "admin_controls": { + "$ref": "#/components/schemas/AdminControls", + "description": "Controls applied by Paxos administrators for regulatory or risk management purposes" + } + }, + "description": "Optional structured data - mirrors the controls object structure (excluding available_actions)" + } + } + }, + "FailedMembersDetail": { + "type": "object", + "required": ["message"], + "properties": { + "message": { + "type": "string", + "description": "Human-readable message about failed members" + }, + "metadata": { + "type": "object", + "properties": { + "failed_members": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Optional structured data - only included when there are specific failed member details to report" } } }, @@ -1456,34 +1846,34 @@ "type": "boolean", "description": "Whether the identity is permanently closed" }, - "paxos_controls": { - "$ref": "#/components/schemas/PaxosControls", - "description": "Controls applied by Paxos for regulatory or risk management purposes" + "denied": { + "type": "boolean", + "description": "Whether the identity has been denied" + }, + "admin_controls": { + "$ref": "#/components/schemas/AdminControls", + "description": "Controls applied by Paxos administrators for regulatory or risk management purposes" } } }, - "PaxosControls": { + "AdminControls": { "type": "object", "properties": { "dormant": { "type": "boolean", - "description": "Whether Paxos has marked the identity as dormant" + "description": "Whether Paxos administrators have marked the identity as dormant" }, "frozen": { "type": "boolean", - "description": "Whether Paxos has frozen the identity" + "description": "Whether Paxos administrators have frozen the identity" }, "closed": { "type": "boolean", - "description": "Whether Paxos has closed the identity" + "description": "Whether Paxos administrators have closed the identity" }, - "closure_reason": { - "type": "array", - "items": { - "type": "string", - "enum": ["REGULATORY_COMPLIANCE", "RISK_MANAGEMENT", "CUSTOMER_REQUEST", "ACCOUNT_VIOLATION", "SUSPICIOUS_ACTIVITY"] - }, - "description": "Reasons for closure if the identity is closed" + "denied": { + "type": "boolean", + "description": "Whether Paxos administrators have denied the identity" } } }, @@ -1492,30 +1882,79 @@ "properties": { "frozen": { "type": "boolean", - "description": "Set the frozen status of the identity" + "description": "Set the frozen status of the identity (mutually exclusive with dormant, closed, denied)" }, "dormant": { "type": "boolean", - "description": "Set the dormant status of the identity" + "description": "Set the dormant status of the identity (mutually exclusive with frozen, closed, denied)" }, "closed": { "type": "boolean", - "description": "Close the identity permanently (cannot be undone)" + "description": "Close the identity permanently (cannot be undone, mutually exclusive with frozen, dormant, denied)" + }, + "denied": { + "type": "boolean", + "description": "Deny the identity (cannot be undone without resubmission, mutually exclusive with frozen, dormant, closed)" + }, + "available_actions": { + "type": "array", + "items": { + "type": "string", + "enum": ["CRYPTO_WITHDRAWAL", "CRYPTO_DEPOSITS", "FIAT_WITHDRAWAL", "FIAT_DEPOSITS", "CONVERSION", "TRADING", "SETTLEMENT"] + }, + "description": "List of actions currently available for this identity" }, - "closure_reason": { + "reason": { "type": "string", - "enum": ["REGULATORY_COMPLIANCE", "RISK_MANAGEMENT", "CUSTOMER_REQUEST", "ACCOUNT_VIOLATION", "SUSPICIOUS_ACTIVITY"], - "description": "Reason for closing the identity (required if closed=true)" + "description": "Freetext reason for the control action" } } }, "CloseIdentityRequest": { "type": "object", "properties": { - "closure_reason": { + "reason": { "type": "string", - "enum": ["REGULATORY_COMPLIANCE", "RISK_MANAGEMENT", "CUSTOMER_REQUEST", "ACCOUNT_VIOLATION", "SUSPICIOUS_ACTIVITY"], - "description": "Reason for closing the identity" + "description": "Freetext reason for closing the identity" + } + } + }, + "DenyIdentityRequest": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "Freetext reason for denying the identity" + } + } + }, + "FreezeIdentityRequest": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "Freetext reason for freezing the identity" + } + } + }, + "DormantIdentityRequest": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "Freetext reason for setting the identity as dormant" + } + } + }, + "IdentityControlsItem": { + "type": "object", + "properties": { + "identity_id": { + "type": "string", + "description": "The identity ID" + }, + "identity_controls": { + "$ref": "#/components/schemas/IdentityControls" } } } From 3708419bcd170155a28f6aa364465449fd99b292 Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 19 Aug 2025 13:59:57 +0100 Subject: [PATCH 5/7] Refactor ListIdentityControlsResponse schema in Paxos API to return an array of identity controls. Add detailed examples for various identity statuses, including pending, disabled, and denied states, enhancing clarity and usability of the API response. --- .../paxos-v2-preview-identity.openapi.json | 133 ++++++++++++++++-- 1 file changed, 121 insertions(+), 12 deletions(-) diff --git a/api-reference/preview/paxos-v2-preview-identity.openapi.json b/api-reference/preview/paxos-v2-preview-identity.openapi.json index f2e3947..9f902be 100644 --- a/api-reference/preview/paxos-v2-preview-identity.openapi.json +++ b/api-reference/preview/paxos-v2-preview-identity.openapi.json @@ -1115,17 +1115,9 @@ } }, "ListIdentityControlsResponse": { - "type": "object", - "properties": { - "identity_controls": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IdentityControlsItem" - } - }, - "next_page_cursor": { - "type": "string" - } + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentityControlsItem" } }, "Identity": { @@ -1190,7 +1182,124 @@ "$ref": "#/components/schemas/IdentityControls", "description": "Current control state and action restrictions applied to this identity" } - } + }, + "examples": [ + { + "id": "01HZ8X9K2FGHJKPQRSTVWXYZ01", + "customer_id": "cust_01HZ8X9K2FGHJKPQRSTVWXYZ02", + "ref_id": "user-123-2024", + "identity_type": "PERSON", + "status": "PENDING", + "status_details": { + "pending_verifications": { + "message": "Identity verification is in progress", + "metadata": { + "statuses": [ + {"type": "IDV", "status": "PENDING"}, + {"type": "AML", "status": "PENDING"} + ] + } + } + }, + "created_at": "2024-07-31T10:30:00Z", + "updated_at": "2024-07-31T10:30:00Z", + "metadata": { + "source": "web_portal", + "region": "US" + }, + "controls": { + "available_actions": ["CRYPTO_DEPOSITS", "FIAT_DEPOSITS"], + "dormant": false, + "frozen": false, + "closed": false, + "denied": false, + "admin_controls": { + "frozen": false, + "dormant": false, + "closed": false, + "denied": false + } + } + }, + { + "id": "01HZ8X9K2FGHJKPQRSTVWXYZ03", + "customer_id": "cust_01HZ8X9K2FGHJKPQRSTVWXYZ04", + "ref_id": "company-456-2024", + "identity_type": "INSTITUTION", + "status": "DISABLED", + "status_details": { + "failed_controls": { + "message": "Identity has been closed by administrator due to compliance requirements", + "metadata": { + "dormant": false, + "frozen": false, + "closed": true, + "denied": false, + "admin_controls": { + "frozen": false, + "dormant": false, + "closed": true, + "denied": false + } + } + } + }, + "created_at": "2024-07-25T14:15:00Z", + "updated_at": "2024-07-30T16:45:00Z", + "metadata": { + "source": "api", + "region": "EU" + }, + "controls": { + "available_actions": [], + "dormant": false, + "frozen": false, + "closed": true, + "denied": false, + "admin_controls": { + "frozen": false, + "dormant": false, + "closed": true, + "denied": false + } + } + }, + { + "id": "01HZ8X9K2FGHJKPQRSTVWXYZ05", + "customer_id": "cust_01HZ8X9K2FGHJKPQRSTVWXYZ06", + "ref_id": "trader-789-2024", + "identity_type": "PERSON", + "status": "DENIED", + "status_details": { + "failed_verifications": { + "message": "Identity verification failed due to document issues", + "metadata": { + "statuses": [ + {"type": "IDV", "status": "FAILED"} + ] + } + } + }, + "created_at": "2024-07-28T09:20:00Z", + "updated_at": "2024-07-31T11:00:00Z", + "metadata": { + "source": "mobile_app" + }, + "controls": { + "available_actions": [], + "dormant": false, + "frozen": false, + "closed": false, + "denied": true, + "admin_controls": { + "frozen": false, + "dormant": false, + "closed": false, + "denied": true + } + } + } + ] }, "CreateIdentityRequest": { "type": "object", From 71c2b3a8de20800ad37b1ed7d534ac7332dea229 Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 8 Sep 2025 16:41:56 +0100 Subject: [PATCH 6/7] Update Paxos API documentation: remove deprecated Identity Previews section and replace OpenAPI source with a new temporary API specification file. Enhance API structure for better clarity and usability. --- api-reference/temp-api-spec.json | 14817 +++++++++++++++++++++++++++++ docs.json | 12 +- 2 files changed, 14821 insertions(+), 8 deletions(-) create mode 100644 api-reference/temp-api-spec.json diff --git a/api-reference/temp-api-spec.json b/api-reference/temp-api-spec.json new file mode 100644 index 0000000..fdd2d85 --- /dev/null +++ b/api-reference/temp-api-spec.json @@ -0,0 +1,14817 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Paxos API", + "version": "2.0", + "description": "

Welcome to Paxos APIs. At Paxos, our mission is to enable the movement of any asset, any time, in a trustworthy way. These APIs serve that mission by making it easier than ever for you to directly integrate our product capabilities into your application, leveraging the speed, stability, and security of the Paxos platform.

The documentation that follows gives you access to our Crypto Brokerage, Trading, and Exchange products. It includes APIs for market data, orders, and the held rate quote flow.

To test in our sandbox environment, sign up for an account. For more information about Paxos and our APIs, visit Paxos.com.

\n", + "x-logo": { + "url": "/docs/paxos.svg", + "backgroundColor": "#FFFFFF", + "altText": "Paxos logo" + } + }, + "tags": [ + { + "name": "Profiles", + "description": "Profiles hold asset balances, and every Paxos transaction is on a particular profile.\nDepending on your integration type, Profiles may be used to reflect both corporate balances or individual user balances.\nThere are two types of Profiles:\n- `DEFAULT` Profiles are system-generated.\n- `NORMAL` Profiles are created using the [Create Profile](#operation/CreateProfile) endpoint and are the only type of Profile you can create.\n" + }, + { + "name": "Quotes", + "description": "Quotes are \"held rates\" offered by Paxos to buy or sell assets at a specific\nprice within a period of time - for example, the option to buy BTC within\nthe next 30 seconds for $8,000.\n\nThe typical Quotes workflow is as follows:\n\n1. Call [List Quotes](#operation/ListQuotes) to get the latest available\n quoted prices for the assets you want to buy or sell.\n1. Present the offered price to one or more end-users, with a timer\n indicating the time to expiration.\n1. If a user accepts the price, call [Create Quote Execution](#operation/CreateQuoteExecution) with the amount to buy or sell.\n1. Call [Get Quote Execution](#operation/GetQuoteExecution) to monitor\n for completion and know when the funds from the execution are available.\n\nIt's important to show end-users the latest available price. If you cache\nprices to show them to multiple users, you should refresh the cache once\nper second.\n\nYou can call [List Quote Executions](#operation/ListQuoteExecutions) to\nreview or construct reports on quote execution activity.\n" + }, + { + "name": "Quote Executions", + "description": "Quote Executions buy or sell assets using a Quote obtained from\nthe [Quotes](#tag/Quotes) flow.\n" + }, + { + "name": "Orders", + "description": "

There are three types of orders: market, limit and post-only.

\n

Market orders guarantee execution at a variable price and quantity. Limit orders guarantee price and quantity at the time of execution but do not guarantee execution. Post-only is an order type that will only be placed on the order book if it is the maker side of a trade.

\n" + }, + { + "name": "Market Data", + "description": "Market data provides various parameters of the order book and historical order data.\n" + }, + { + "name": "Pricing", + "description": "Pricing provides historical data related to charting of asset prices.\n\nNote: Some Pricing API markets may be unavailable for trading.\n" + }, + { + "name": "Identity", + "description": "An Identity represents a person or institution who is able to take actions on the Paxos Platform. Depending on \nyour integration type you might not need to create Identities for your end users. \n\nIdentities must pass a set of verifications and checks before they're able to transact on the Platform. Learn more\nabout getting started with Identity and managing their onboarding lifecycle in the [Identity Developer Guide](https://docs.paxos.com/identity).\n" + }, + { + "name": "Institution Members", + "description": "Institution Members allow you to associate persons with an institution on our Platform.\nEach institution can have multiple members, with each member representing the relationship to a person identity.\n\nWhen creating an institution identity, you must designate at least one institution member.\nThis requirement ensures we have complete information about the institution's ownership structure\nand key personnel, which is necessary to onboard institutions.\n" + }, + { + "name": "Accounts", + "description": "Accounts connect Identities (persons or institutions) to Profiles (asset balances).\nKey features include:\n\n- **Balance Management**: Track and manage profile balances via [Subledgering](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger)\n- **Joint Account Support**: Link multiple Identities to a single Account for shared on platform balance\n\nAccounts are required for all Identity API integrations.\n" + }, + { + "name": "Account Members", + "description": "Account Members allow you to associate an Identity with an Account on our Platform.\nEach Account can be linked to multiple Identities, which supports Joint Accounts (where two Identities have the ability\nto transact against a single Profile) \n\nAccount members are effectively immutable. In order to update an account member,\nclients should remove then re-add the account member with the desired state.\n\nThe API requires clients to have write access on the account and all identities\nassociated with the account.\n" + }, + { + "name": "Identity Documents", + "description": "The Identity Documents API allows clients to send documents to Paxos to validate identities\nduring the KYC process. Files can be updated multiple times by re-sending the document type\nfor processing.\n\nWe currently accept the following file formats:\n- pdf\n- jpg\n- png\n\nSteps to upload a document are as follows:\n1. Send a PUT request to /identity/identities/{id}/documents to get\n the upload URL.\n1. Send your document to the provided URL via a PUT request. Take the following example using curl:\n $ curl --upload-file Proof_of_residence.jpg $URI \n\nUploaded document metadata will be available via GET request to /identity/identities/{id}/documents\n" + }, + { + "name": "Fiat Transfers", + "description": "The Fiat Transfers API allows clients to deposit and withdraw fiat via the following Fiat Networks: Wire (Fedwire and SWIFT) and CUBIX. The supported asset is USD.\n\nThe full set of Fiat Transfers API endpoints is:\n- For Deposits:\n - [Create Fiat Deposit Instructions](#operation/CreateFiatDepositInstructions)\n - [List Fiat Deposit Instructions](#operation/ListFiatDepositInstructions)\n - [Get Fiat Deposit Instructions](#operation/GetFiatDepositInstructions)\n- For Withdrawals:\n - [Create Fiat Account](#operation/CreateFiatAccount)\n - [List Fiat Accounts](#operation/ListFiatAccounts)\n - [Get Fiat Account](#operation/GetFiatAccount)\n - [Delete Fiat Account](#operation/DeleteFiatAccount)\n - [Update Fiat Account](#operation/UpdateFiatAccount)\n - [Create Fiat Withdrawal](#operation/CreateFiatWithdrawal)\n" + }, + { + "name": "Stablecoin Conversion", + "description": "

Convert between fiat and stablecoin using Create Stablecoin Conversion and check the status of a single conversion or retrieve a list of conversions.

\n", + "externalDocs": { + "description": "Learn more about stablecoin conversions →", + "url": "https://docs.paxos.com/developer/convert" + } + }, + { + "name": "Transfers", + "description": "Each deposit to and withdrawal from a Paxos account is a Transfer.\nA Transfer is associated with a particular Profile, and increases or\ndecreases the available balance of a single asset in that Profile.\n" + }, + { + "name": "Tax Forms", + "description": "All tax forms are associated to a single account_id.\nAn account_id can have multiple tax forms associated with it.\nUS 1099-B and 1099-Misc tax forms for the previous fiscal year will be available in February of the current calendar year.\nPrevious years tax forms are also available by request.\n" + }, + { + "name": "Crypto Deposits", + "description": "For [Paxos Global PTE Ltd](https://help.paxos.com/hc/en-us/articles/9647005243284) users, update or reject a crypto deposit that does not contain the required [travel rule](https://help.paxos.com/hc/en-us/articles/25928845778068) information.\nDeposits with the `NEEDS_INFO` status require additional sender information before they can be processed.\n- For individuals, both first and last name are required.\n- For institutions, the institution name is required.\n\nIf a deposit is rejected, the funds will no longer be available.\n", + "externalDocs": { + "description": "Learn more about travel rule udpates →", + "url": "https://help.paxos.com/hc/en-us/articles/25422999706900" + } + }, + { + "name": "Settlement", + "description": "Use the Settlements API to facilitate simultaneous exchange of pre-funded assets. Automate a variety of use cases that require two-party approval, including net settlement of over-the-counter trades, withdrawal requests for tri-party collateral, payment requests, and bilateral settlement for marketplace end users.\n\nThe simple request-and-approval workflow supports both one-directional and bidirectional transactions to allow a user to receive an asset (for example, send USDP) or simultaneously send and receive assets (for example, send USD and receive BTC and ETH). Only when all parties are in agreement and assets are fully funded does the Settlements API allow for change of custody. Upon completion, all settled assets are immediately available for trading, transferring, withdrawal or other supported activities.\n\nThe Source Profile initiates the transaction for the Target Profile to approve. The `DIRECTION` of each asset is always relative to the Source Profile and only the owner of the Source Profile can cancel a transaction if it hasn't been approved by the Target Profile.\n", + "externalDocs": { + "description": "Learn more about the Settlement APIs →", + "url": "https://docs.paxos.com/settlements" + } + }, + { + "name": "Paxos Transfers", + "description": "Move assets between two Entities belonging to the same Organization or to a different Organization on the Paxos platform.\n\n> Transferring USD between Entities is prohibited in some jurisdictions. Contact [Support](https://support.paxos.com/) if you run into any problems with this restriction.\n\nEnsure the destination [Profile](https://docs.paxos.com/dashboard/organization#profile) already exists before beginning the transfer. This may require contacting someone outside your Organization to get the destination Profile ID.\n" + }, + { + "name": "Monitoring Addresses", + "description": "A Monitoring Address is a blockchain address that Paxos monitors daily for eligible stablecoin activity and determines the amount of rewards your organization will earn. We recommend adding any addresses you expect to hold, receive, or mint Paxos stablecoins as a monitoring address in order to receive rewards for all of your qualifying on-chain activity. \n\n> Monitoring addresses must be added by month end (`23:59 UTC+0`) in order to earn rewards for that month. Addresses added after month end will start earning rewards for the following month.\n\n*These endpoints are only relevant for Global Dollar Network (GDN) partners.*\n" + }, + { + "name": "Payout Address", + "description": "Endpoints working with Payout Address. These endpoints are only relevant for Global Dollar Network (GDN) partners." + }, + { + "name": "Statements", + "description": "A Statement summarizes all eligible stablecoin rewards for a given organization over a fixed time period. It aggregates earned reward types (e.g., custody, mint, acceptance) and records whether the statement was paid.\n\nStatements are generated monthly and are immutable. Revised statements will be issued as a new statement with a unique ID. Statements can be used to reconcile balances or for accounting and accounts receivable purposes.\n\n*These endpoints are only relevant for Global Dollar Network (GDN) partners.*\n" + }, + { + "name": "Payments", + "description": "Payments represent actual transfers of rewards to the payout address associated with a given statement. Payments are made on-chain to a specified payout address. Payments tie 1:1 with a statement amount.\n\nUse the `ref_id` to link payments to statements. \n\n> Some fields (e.g., `account_id`, `profile_id`) are populated for consistency but are not relevant to reward-specific flows.\n\n*These endpoints are only relevant for Global Dollar Network (GDN) partners.*\n" + }, + { + "name": "API Credentials", + "description": "API credentials allow programmatic access to Paxos APIs. These endpoints enable you to manage and view your API credentials.\n" + }, + { + "name": "Events", + "description": "The Events API allows you to fetch events that occurred on the Paxos platform with the full event payload. This REST API can be used as part of your webhook integrations (including rebuilding your event history should your webhook consumer exceed its retries), or standalone by polling for events related to your identities.\n" + }, + { + "name": "Event Types", + "description": "
\n
\n
\n \n
\n \n
\n

\n Identity requires additional documents, use the UploadDocument endpoint to upload all required documents.\n

\n
\n
\n \n
\n \n
\n

\n Identity is APPROVED\n

\n
\n
\n \n
\n \n
\n

\n Identity is DENIED\n

\n
\n
\n \n
\n \n
\n

\n Identity is DISABLED\n

\n
\n
\n \n
\n \n
\n

\n Identity is required to undergo its periodic KYC refresh.\n

\n
\n
\n \n
\n \n
\n

\n Identity has successfully completed its periodic KYC refresh.\n

\n
\n
\n \n
\n \n
\n

\n Identity has not completed its required KYC refresh within the designated timeframe.\n

\n
\n
\n \n
\n \n
\n

\n Crypto deposit detected on-chain and is PENDING confirmation.\n

\n
\n
\n \n
\n \n
\n

\n Crypto deposit is COMPLETED and funds are available on platform.\n

\n
\n
\n \n
\n \n
\n

\n Crypto deposit has FAILED or been cancelled.\n

\n
\n
\n \n
\n \n
\n

\n Crypto withdrawal has been initiated and is PENDING on-chain processing.\n

\n
\n
\n \n
\n \n
\n

\n Crypto withdrawal is COMPLETED and has been sent to the destination address.\n

\n
\n
\n \n
\n \n
\n

\n Crypto withdrawal has FAILED or been cancelled.\n

\n
\n
\n \n
\n \n
\n

\n Fiat deposit via DBS has been initiated and is PENDING processing.\n

\n
\n
\n \n
\n \n
\n

\n Fiat deposit via DBS is COMPLETED and funds are available on platform.\n

\n
\n
\n \n
\n \n
\n

\n Fiat deposit via DBS has FAILED or been cancelled.\n

\n
\n
\n \n
\n \n
\n

\n Fiat withdrawal via DBS has been initiated and is PENDING processing.\n

\n
\n
\n \n
\n \n
\n

\n Fiat withdrawal via DBS is COMPLETED and has been sent to the destination account.\n

\n
\n
\n \n
\n \n
\n

\n Fiat withdrawal via DBS has FAILED or been cancelled.\n

\n
\n
\n
\n
\n

\n \n Note: We may add additional event types at any time. Your implementation should handle unexpected event types gracefully.\n \n

\n
\n
\n
\n" + }, + { + "name": "Event Objects", + "description": "
\n

\n The following object schemas describe the structure of data that accompanies each event type.\n

\n \n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FieldTypeDescription
\n id\n UUIDUnique identifier for this event object
\n identity_id\n UUIDIdentifier for the identity requiring documents
\n required_documents\n list enum\n List of required document types\n
\n
\n
\n
\n \n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FieldTypeDescription
\n id\n UUIDUnique identifier for this event object
\n identity_id\n UUIDIdentifier for the affected identity
\n old_summary_status\n enum\n Previous status:\n \n PENDING\n ERROR\n APPROVED\n DENIED\n DISABLED\n \n
\n new_summary_status\n enum\n New status:\n \n PENDING\n ERROR\n APPROVED\n DENIED\n DISABLED\n \n
\n
\n
\n
\n \n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FieldTypeDescription
\n id\n UUIDUnique identifier for this event object
\n identity_id\n UUIDIdentifier for the affected identity
\n last_kyc_refresh_date\n Datetime\n Date of the most recent completed KYC refresh\n (optional)\n
\n next_kyc_refresh_date\n Datetime\n Scheduled date for the next KYC refresh\n (optional)\n
\n
\n
\n
\n \n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FieldTypeDescription
\n id\n UUIDThe Paxos transfer ID. You can call the GetTransfer endpoint with this ID to get more details about it.
\n type\n enum\n Type of transfer:\n \n CRYPTO_DEPOSIT\n CRYPTO_WITHDRAWAL\n ACT_DEPOSIT\n ACT_WITHDRAWAL\n \n
\n status\n enum\n Status of transfer:\n \n PENDING\n COMPLETED\n FAILED\n \n
\n ref_id\n string\n The client-specified ID of the transfer for replay protection and lookup.\n (optional)\n
\n crypto_network\n enum\n Cryptocurrency network (e.g. ETHEREUM, BASE, SOLANA)\n (optional, present for crypto transfers)\n
\n crypto_tx_hash\n string\n On-chain transaction hash\n (optional, present for crypto transfers when available)\n
\n crypto_tx_index\n string\n The output index or output address\n (optional, present for crypto transfers when available)\n
\n memo\n string\n Memo associated with the transfer as an identifier\n (optional, present for fiat transfers when available)\n
\n
\n
\n
\n\n \n
\n" + } + ], + "paths": { + "/profiles": { + "get": { + "summary": "List Profiles", + "description": "Return the associated Profiles for the current Account.\nThe paginated results default to the maximum limit of 1,000 Profiles, unless otherwise specified with the `limit` parameter.\nEvery paginated response contains a `next_page` field until the last page is reached.\nPass the `next_page` value into the `page_cursor` field of the next request to retrieve the next page of results.", + "operationId": "ListProfiles", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListProfilesResponse" + }, + "examples": { + "response": { + "value": { + "items": [ + { + "id": "1a763ac5-13d9-4568-bb8b-747c416b105c", + "nickname": "default", + "type": "DEFAULT" + }, + { + "id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "nickname": "MyProfileName", + "type": "NORMAL" + } + ] + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Return items in ascending (ASC) or descending (DESC) order. Defaults to ASC.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "order_by", + "description": "The specific method by which the returned results will be ordered.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + } + }, + { + "name": "page_cursor", + "description": "Cursor token for fetching the next page.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "nickname", + "description": "Optionally filter by Profile display name. Retrieves nickname(s) based on the beginning characters of the given display name (prefix matching). Case insensitive. WIldcards and regular expressions not supported.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ids", + "description": "Optionally filter by the UUIDs of the profiles. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Profiles" + ], + "security": [ + { + "OAuth2": [ + "funding:read_profile" + ] + } + ] + }, + "post": { + "summary": "Create Profile", + "description": "Create a new profile for this account. Profiles created using this endpoint always have a type of `NORMAL`.", + "operationId": "CreateProfile", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Profile" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProfileRequest" + } + } + }, + "required": true + }, + "tags": [ + "Profiles" + ], + "security": [ + { + "OAuth2": [ + "funding:write_profile" + ] + } + ] + } + }, + "/profiles/{profile_id}": { + "get": { + "summary": "Get Profile", + "description": "Read a single profile by its UUID, or read the default profile using the alias \"default\".", + "operationId": "GetProfile", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Profile" + }, + "examples": { + "profile_id=b7b77d82-e6a7-4ae9-9904-36231aedf985": { + "value": { + "id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "nickname": "MyProfileName", + "type": "NORMAL" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The UUID of the profile, or \"default\" for the default profile.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "include_deactivated", + "description": "Used to include deactivated profiles in the response.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Profiles" + ], + "security": [ + { + "OAuth2": [ + "funding:read_profile" + ] + } + ] + }, + "put": { + "summary": "Update Profile", + "description": "Change the `nickname` label for the given `profile_id` (Profile).", + "operationId": "UpdateProfile", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Profile" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProfilePublicUpdateProfileBody" + } + } + }, + "required": true + }, + "tags": [ + "Profiles" + ], + "security": [ + { + "OAuth2": [ + "funding:write_profile" + ] + } + ] + } + }, + "/profiles/{profile_id}/balances": { + "get": { + "summary": "List Profile Balances", + "description": "Retrieve the Profile’s available and trading balances.\nUse query parameters to retrieve a defined set of assets.\nOmit query parameters to retrieve all asset balances.", + "operationId": "ListProfileBalances", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListProfileBalancesResponse" + }, + "examples": { + "assets=BTC,USD": { + "value": { + "items": [ + { + "asset": "BTC", + "available": "1.23103715", + "trading": ".25" + }, + { + "asset": "USD", + "available": "1510.23", + "trading": "100.00" + } + ] + } + }, + "All Assets": { + "value": { + "items": [ + { + "asset": "USD", + "available": "1510.23", + "trading": "100.00" + }, + { + "asset": "EUR", + "available": "0", + "trading": "0" + }, + { + "asset": "SGD", + "available": "0", + "trading": "0" + }, + { + "asset": "BTC", + "available": "1.23103715", + "trading": ".25" + }, + { + "asset": "ETH", + "available": "0", + "trading": "0" + }, + { + "asset": "PAXG", + "available": "0", + "trading": "0" + }, + { + "asset": "BCH", + "available": "0", + "trading": "0" + }, + { + "asset": "SOL", + "available": "0", + "trading": "0" + } + ] + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "assets", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Profiles" + ], + "security": [ + { + "OAuth2": [ + "funding:read_profile" + ] + } + ] + } + }, + "/profiles/{profile_id}/balances/{asset}": { + "get": { + "summary": "Get Profile Balance", + "description": "Get the balance of `asset` in a profile.", + "operationId": "GetProfileBalance", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProfileBalance" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "asset", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Profiles" + ], + "security": [ + { + "OAuth2": [ + "funding:read_profile" + ] + } + ] + } + }, + "/profiles/{profile_id}/deactivate": { + "put": { + "summary": "Deactivate Profile", + "description": "Deactivate the given `profile_id`. The default profile cannot be deactivated.\nDeactivated profiles won't be visible for deposits.\nProfiles with more than zero balances cannot be deactivated.\nIf a deactivated profile has a non-zero balance it will be reactivated.", + "operationId": "DeactivateProfile", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeactivateProfileResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The UUID of the profile.\nThe default profile cannot be deactivated.\nThe profile must have a zero balance to be deactivated.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Profiles" + ], + "security": [ + { + "OAuth2": [ + "funding:write_profile" + ] + } + ] + } + }, + "/sandbox/profiles/{profile_id}/deposit": { + "post": { + "summary": "Create Sandbox Deposit", + "description": "Create a test deposit to fund a profile in the sandbox environment.\n\nAlways specify `crypto_network` when making a crypto sandbox deposit. Omit the parameter when depositing fiat.\n\n*This functionality is only available in the sandbox environment.*", + "operationId": "CreateSandboxDeposit", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSandboxDepositResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The ID of the profile that will credited with the assets.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FundingSandboxCreateSandboxDepositBody" + } + } + }, + "required": true + }, + "tags": [ + "Sandbox Deposits" + ], + "security": [ + { + "OAuth2": [ + "funding:read_profile" + ] + } + ] + } + }, + "/identity/identities": { + "get": { + "summary": "List Identities", + "description": "This endpoint enables you to fetch a list of Identities.\nYou can use query parameters to filter the results returned by `created_at`, `updated_at`, `summary_status` and `identity_type`\n\nNote that this endpoint supports pagination and returns a cursor token for fetching next pages.", + "operationId": "ListIdentities", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListIdentitiesResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "summary_status", + "description": "Summary Status of the Identity.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "PENDING", + "ERROR", + "APPROVED", + "DENIED", + "DISABLED" + ] + } + }, + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Return items in ascending (ASC) or descending (DESC) order. Defaults to DESC.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "order_by", + "description": "The specific method by which the returned results will be ordered.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + } + }, + { + "name": "page_cursor", + "description": "Cursor token for fetching the next page.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "identity_type", + "description": "Optionally filter by Identity type", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "PERSON", + "INSTITUTION" + ] + } + } + ], + "tags": [ + "Identity" + ], + "security": [ + { + "OAuth2": [ + "identity:read_identity" + ] + } + ] + }, + "post": { + "summary": "Create Identity", + "description": "Creates a new Person or Institution Identity on the Paxos Platform.\n\nA successful response indicates that the identity has been created and is `PENDING` approval. The identity is only\navailable to use on the Platform once it is `APPROVED`. For a full description of statuses read the [status guide here](https://docs.paxos.com/identity/statuses).\n\nFor detailed guidance on which [fields are required](https://docs.paxos.com/identity/required-details) for your integration\nor the [lifecycle of an Identity](https://docs.paxos.com/identity/statuses) on the platform, please read the [Identity Developer Guide](https://docs.paxos.com/identity).", + "operationId": "CreateIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + }, + "examples": { + "Create Person Identity with Passthrough": { + "value": { + "created_at": "2022-02-15T05:46:50.957068Z", + "id": "36ae1728-c54a-4046-86df-8a413e0ab9b3", + "person_details": { + "additional_screening_status": "PENDING", + "address": { + "address1": "1 Example St", + "city": "New York", + "country": "USA", + "province": "NY", + "zip_code": "10001" + }, + "cip_id": "111-11-1234", + "cip_id_country": "USA", + "cip_id_type": "SSN", + "date_of_birth": "1980-01-01T00:00:00Z", + "first_name": "John", + "govt_id": "111-11-1234", + "govt_id_type": "SSN", + "id_verification_status": "APPROVED", + "last_name": "Doe", + "nationality": "USA", + "passthrough_verified_at": "2021-06-16T09:28:14Z", + "passthrough_verifier_type'": "JUMIO", + "sanctions_verification_status": "PENDING", + "verifier_type": "PASSTHROUGH" + }, + "ref_id": "33ece656-eef1-43b5-a851-b6b9099089a5", + "summary_status": "PENDING", + "tax_details": [ + { + "tax_payer_country": "USA", + "tax_payer_id": "111-11-1234" + } + ], + "type": "PERSON", + "updated_at": "2022-02-15T05:46:50.957068Z" + } + }, + "Create Institutional Identity": { + "value": { + "created_at": "2022-02-15T22:47:06.808912Z", + "id": "09d32f7b-fe0c-47d0-9968-89267909320a", + "institution_details": { + "additional_screening_status": "PENDING", + "business_address": { + "address1": "1 Example St", + "city": "New York", + "country": "USA", + "province": "NY", + "zip_code": "10001" + }, + "cip_id": "12-9876543", + "cip_id_country": "USA", + "cip_id_type": "EIN", + "document_verification_status": "PENDING", + "govt_registration_date": "2021-04-14T00:00:00Z", + "incorporation_address": { + "address1": "1 Example St", + "city": "New York", + "country": "USA", + "province": "NY", + "zip_code": "10001" + }, + "institution_sub_type": "INVESTMENT", + "institution_type": "TRUST", + "name": "Institution A", + "regulation_status": "NON_REGULATED", + "sanctions_verification_status": "PENDING", + "trading_type": "PRIVATE" + }, + "institution_members": [ + { + "identity_id": "a81d4cf9-da6d-40ff-9366-0405aedfd31e", + "roles": [ + "GRANTOR" + ] + }, + { + "identity_id": "e458c723-edfa-478e-a01c-939707c0be9f", + "roles": [ + "TRUSTEE" + ] + }, + { + "identity_id": "b11242ea-5772-4970-934b-6336540ded05", + "roles": [ + "BENEFICIAL_OWNER" + ] + } + ], + "ref_id": "33ece656-eef1-43b5-a851-b6b9099089a6", + "summary_status": "PENDING", + "tax_details": [ + { + "tax_payer_country": "USA", + "tax_payer_id": "12-9876543" + } + ], + "type": "INSTITUTION", + "updated_at": "2022-02-15T22:47:06.808912Z" + } + } + } + } + } + }, + "409": { + "description": "Duplicate identity record", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Create Identity with the same SSN": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "duplicate (cip_id, cip_id_type, cip_id_country) provided", + "meta": { + "existing": { + "id": "36ae1728-c54a-4046-86df-8a403e0ab9b3" + } + } + } + }, + "Duplicate fef_id provided": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "duplicate ref_id provided", + "meta": { + "existing": { + "id": "c9560de1-835c-48fa-bd1a-e91da2ef770c" + } + } + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateIdentityRequest" + }, + "examples": { + "Create Person Identity": { + "value": { + "person_details": { + "verifier_type": "PASSTHROUGH", + "passthrough_verifier_type": "JUMIO", + "passthrough_verified_at": "2021-06-16T09:28:14Z", + "first_name": "John", + "last_name": "Doe", + "date_of_birth": "1980-01-01", + "phone_number": "+1 555 678 1234", + "email": "example@somemail.org", + "cip_id": "111-11-1234", + "cip_id_type": "SSN", + "cip_id_country": "USA", + "nationality": "USA", + "address": { + "country": "USA", + "address1": "1 Example St", + "city": "New York", + "province": "NY", + "zip_code": "10001" + }, + "metadata": { + "custom_property1": "custom value 1", + "custom_property2": "custom value 2" + } + }, + "ref_id": "33ece656-eef1-43b5-a851-b6b9099089a5" + } + }, + "Create Institutional Identity": { + "value": { + "institution_members": [ + { + "identity_id": "a81d4cf9-da6d-40ff-9366-0405aedfd31e", + "roles": [ + "GRANTOR" + ] + }, + { + "identity_id": "e458c723-edfa-478e-a01c-939707c0be9f", + "roles": [ + "TRUSTEE" + ] + }, + { + "identity_id": "b11242ea-5772-4970-934b-6336540ded05", + "roles": [ + "BENEFICIAL_OWNER" + ] + } + ], + "institution_details": { + "name": "Institution A", + "institution_type": "TRUST", + "institution_sub_type": "INVESTMENT", + "cip_id": "12-9569897", + "cip_id_type": "EIN", + "cip_id_country": "USA", + "govt_registration_date": "2021-04-14T00:00:00Z", + "business_address": { + "address1": "1 Example St", + "city": "New York", + "country": "USA", + "province": "NY", + "zip_code": "10001" + }, + "incorporation_address": { + "address1": "1 Example St", + "city": "New York", + "country": "USA", + "province": "NY", + "zip_code": "10001" + }, + "regulation_status": "NON_REGULATED", + "trading_type": "PRIVATE" + }, + "ref_id": "33ece656-eef1-43b5-a851-b6b9099089a6" + } + } + } + } + }, + "required": true + }, + "tags": [ + "Identity" + ], + "security": [ + { + "OAuth2": [ + "identity:write_identity" + ] + } + ] + } + }, + "/identity/identities/{identity_id}/documents": { + "get": { + "summary": "List Identity Documents", + "description": "This endpoint enables you to get a list of all documents associated with an identity.", + "operationId": "ListIdentityDocuments", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListIdentityDocumentsResponse" + }, + "examples": { + "List Identity Documents": { + "value": { + "documents": [ + { + "file_id": "e1959b03-8c3d-4bdd-9437-403ccf8772f5", + "name": "test_file.png", + "document_types": [ + "OTHER_DOCUMENTS", + "APPLICATION" + ], + "created_at": "2023-07-07T23:03:19.170481Z" + } + ] + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "value": { + "detail": "Identity with id f6b1365a-dc8e-4526-aa3f-e688826c36be doesn't exist", + "status": 404, + "title": "Not Found", + "type": "about:blank" + } + } + } + } + } + }, + "403": { + "description": "Permissions Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Forbidden": { + "value": { + "detail": "Forbidden", + "status": 403, + "title": "Forbidden", + "type": "about:blank" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "identity_id", + "description": "id associated with the identity", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "include_pending_docs", + "description": "Add a list of pending document types for the identity", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Identity Documents" + ], + "security": [ + { + "OAuth2": [ + "identity:read_identity" + ] + } + ] + }, + "put": { + "summary": "Document Upload", + "description": "This endpoint enables you to receive a URL to upload a document to Paxos for identity verification or enhanced due diligence purposes.\nWhen uploading a document you must specify the document type. You will receive a\nURL where you can upload the document using a POST request.\n\nRequirements:\n- Uploaded documents must be less than 100 MB in size\n- Supported formats include PDF, JPG, and PNG\n\nFor more information on document requirements for enhanced due diligence, see [here](https://docs.paxos.com/identity/edd).", + "operationId": "DocumentUpload", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentUploadResponse" + }, + "examples": { + "Create Document Upload": { + "value": { + "file_id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "name": "Proof_of_residence.jpg", + "upload_url": "https://s3.amasonaws.com/pax...cec3f64fe20348685a" + } + } + } + } + } + }, + "403": { + "description": "Permissions Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Forbidden": { + "value": { + "detail": "document storage not enabled", + "status": 403, + "title": "Forbidden", + "type": "about:blank" + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "value": { + "detail": "identity does not exist", + "status": 404, + "title": "Not Found", + "type": "about:blank" + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Invalid Request": { + "value": { + "detail": "must provide a file name, up to 260 characters", + "status": 400, + "title": "Bad Request", + "type": "about:blank" + } + } + } + } + } + }, + "409": { + "description": "Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Duplicate File Name": { + "value": { + "detail": "file named \"Proof_of_residence.jpg\" already exists", + "meta": { + "existing": { + "name": "Proof_of_residence.jpg" + } + }, + "status": 409, + "title": "Already Exists", + "type": "https://developer.paxos.com/docs/v2/problems/already-exists" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "identity_id", + "description": "The id of the identity the document is associated with.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentityPublicDocumentUploadBody" + }, + "examples": { + "Create Document Upload": { + "value": { + "name": "Proof_of_residence.jpg", + "document_types": [ + "PROOF_OF_RESIDENCY" + ] + } + } + } + } + }, + "required": true + }, + "tags": [ + "Identity Documents" + ], + "security": [ + { + "OAuth2": [ + "identity:write_identity" + ] + } + ] + } + }, + "/identity/identities/{id}": { + "get": { + "summary": "Get Identity", + "description": "Get an Identity by its (identity) id. You can only see identities created by you.\n\nYou can use the query parameter `include_details` to include identity details (`person_details` or `institution_details`) in\nthe response and the query parameter `include_institution_members` to include institution members in the response.", + "operationId": "GetIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "id associated with the identity", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "include_details", + "description": "query param; details are encrypted, so we do not want to include them by default", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "include_institution_members", + "description": "query param; to include institution members for institution identity", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Identity" + ], + "security": [ + { + "OAuth2": [ + "identity:read_identity" + ] + } + ] + }, + "put": { + "summary": "Update Identity", + "description": "Updates an Identity, this action performs a delta of what is submitted in the update and the existing identity.\n- Updating details (`person_details` or `institution_details`) might lead to the identity being re-verified (e.g. re-screening name changes), which\ncould impact the identity's ability to transact on the Platform.\n- Setting `set_user_disabled` to `true` will make the Identity `DISABLED` (read [more here](https://docs.paxos.com/identity/statuses) on what this means)\n- Setting `tax_details` will update all the tax details for the identity\n- Setting `last_kyc_refresh_date` indicates this is not an adhoc-update, and instead an update for a [periodic kyc refresh](https://docs.paxos.com/identity/kyc-refresh)\n\nChanging an Institution Identity to a Person and vice-versa is not supported.", + "operationId": "UpdateIdentity", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Identity" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentityPublicUpdateIdentityBody" + } + } + }, + "required": true + }, + "tags": [ + "Identity" + ], + "security": [ + { + "OAuth2": [ + "identity:write_identity" + ] + } + ] + } + }, + "/identity/institution-members": { + "post": { + "summary": "Add Institution Members", + "description": "Add one or more institution members to a given institution.\n\nAdding new members doesn't affect existing members. For example, if an institution has three\nmembers, and adds two members using this API, then the institution would end up with five total members.\n\nFor details on the properties that can be specified when creating institution members,\nsee [Specifying Institution Members and Their Roles](#specifying-institution-members-and-their-roles).", + "operationId": "AddInstitutionMembers", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddInstitutionMembersResponse" + }, + "examples": { + "Add Institution Members": { + "value": { + "institution_id": "2908fa8b-427a-4089-b2cf-17654c604623", + "members": [ + { + "identity_id": "31abdcbd-2801-4dbc-8986-adec3828391b", + "roles": [ + "GRANTOR" + ], + "id": "23ebbcd3-0fe6-48c8-9a2c-a35572b0e8ba" + }, + { + "identity_id": "58def33e-b68f-47d3-bc2b-62b1f68f21e5", + "roles": [ + "TRUSTEE" + ], + "id": "a0a0d270-0dd1-40b7-85ce-de713c47bcec" + } + ] + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddInstitutionMembersRequest" + }, + "examples": { + "Add Institution Members": { + "value": { + "institution_id": "2908fa8b-427a-4089-b2cf-17654c604623", + "members": [ + { + "identity_id": "31abdcbd-2801-4dbc-8986-adec3828391b", + "roles": [ + "GRANTOR" + ] + }, + { + "identity_id": "58def33e-b68f-47d3-bc2b-62b1f68f21e5", + "roles": [ + "TRUSTEE" + ] + } + ] + } + } + } + } + }, + "required": true + }, + "tags": [ + "Institution Members" + ], + "security": [ + { + "OAuth2": [ + "identity:write_identity" + ] + } + ] + } + }, + "/identity/institution-members/{id}": { + "delete": { + "summary": "Remove Institution Member", + "description": "Removes an institution member from an institution.", + "operationId": "DeleteInstitutionMember", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteInstitutionMemberResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The institution member ID that should be removed from the institution.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Institution Members" + ], + "security": [ + { + "OAuth2": [ + "identity:write_identity" + ] + } + ] + } + }, + "/identity/accounts": { + "get": { + "summary": "List Accounts", + "description": "List accounts with pagination. Every response will contain a `next_page` field,\nas long as the end of the list has not been reached. Pass this value into the `page_cursor` field of the next request\nto retrieve the next page of results.", + "operationId": "ListAccounts", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListAccountsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "page_cursor", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "order", + "description": "Return items in ascending (ASC) or descending (DESC) order. Defaults to DESC.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "order_by", + "description": "The specific method by which the returned results will be ordered.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + } + }, + { + "name": "limit", + "description": "Number of results to return.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "identity_id", + "description": "Optionally filter by primary identity identity.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "updated_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "tags": [ + "Accounts" + ], + "security": [ + { + "OAuth2": [ + "identity:read_account" + ] + } + ] + }, + "post": { + "summary": "Create Account", + "description": "Create an account for a given identity, via the `identity_id` field.\nThis identity is the primary owner of the account for all tax-related purposes.\n\nTo track user balances using Paxos [Profiles](#tag/Profiles), use `create_profile=true` when creating the account.\nOnce an account has been created, it is not possible to associate it with a [Profile](#tag/Profiles).\n\n### Account Members\n\nIn addition to the primary owner, other identities may be associated with the account, by using `members`.\nThe identity on the account is treated as a BENEFICIAL_OWNER.\n\nTo add a financial advisor to an account, add a member with the FINANCIAL_ADVISOR role.\n\n#### Example\nThis example request creates a joint account for John and Jane Doe. John has identity_id=82c338f4-3cb7-4d9b-be2a-4b077c82ee3a,\nand Jane has identity_id=0f5d8475-33f3-4ebd-88a0-66dedc2581c1. John is the primary owner of the account for tax-purposes, but Jane\nis a full beneficial owner.\n\nAdditionally, this account has an associated financial advisor with identity_id=0d26f878-298e-4d47-81be-cdf4e982a3d3.\n\n```json\n{\n\"account\": {\n\"identity_id\": \"82c338f4-3cb7-4d9b-be2a-4b077c82ee3a\",\n\"members\": [{\n\"identity_id\": \"0f5d8475-33f3-4ebd-88a0-66dedc2581c1\",\n\"roles\": [\"BENEFICIAL_OWNER\"]\n}, {\n\"identity_id\": \"0d26f878-298e-4d47-81be-cdf4e982a3d3\",\n\"roles\": [\"FINANCIAL_ADVISOR\"]\n}]\n}\n}\n```\n\n### Fields\n\nAny fields not listed are forbidden in this request.\n\nField | Notes\n---|---\nidentity_id | Required\ndescription | Optional\nmetadata | Optional\nref_id | Optional\nmembers | Optional", + "operationId": "CreateAccount", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Account" + }, + "example": { + "id": "e69e4e31-6dca-4a46-bb85-af40b5fe2d59", + "identity_id": "82c338f4-3cb7-4d9b-be2a-4b077c82ee3a", + "ref_id": "fec36070-4c23-48ac-9ee1-df338b8233fc", + "description": "Individual account for John Doe", + "metadata": { + "custom_field": "custom_value" + }, + "admin_disabled": false, + "user_disabled": false + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAccountRequest" + } + } + }, + "required": true + }, + "tags": [ + "Accounts" + ], + "security": [ + { + "OAuth2": [ + "identity:write_account" + ] + } + ] + }, + "put": { + "summary": "Update Account", + "description": "This enables you to update an existing account with new information. Please refer to the following\ntable for fields that can be updated via this endpoint.\n\nField | Notes\n---|---\naccount.id | Required\naccount.description | Optional\naccount.ref_id | Optional\naccount.metadata | Optional. This will overwrite any existing metadata added to the account.\naccount.members | Optional. The only roles that can be added/removed are `FINANCIAL_ADVISOR` or `AUTHORIZED_USER.` You must always specify the full members object as we do not currently support differential member updates.\nset_user_disabled | Optional. Setting this to `true` will disable the account, limiting its ability to be used within the Paxos platform.\n\n#### Example Requests\n#### Disabling an account\n\n```json\n{\n\"set_user_disabled\": true,\n\"account\": {\n\"id\": \"82c338f4-3cb7-4d9b-be2a-4b077c82ee3a\",\n\"description\": \"Account Description\",\n\"ref_id\": \"82c338f4-3cb7\"\n}\n}\n```\n\n### Adding an account member\nTo retain the existing account members and add a new account member, the `members` field must contain the existing \naccount members and the new member. The below example adds an `AUTHORIZED_USER` to the account.\n\nIn order to add account members while leaving existing account members unaffected, clients \nshould use the [Add Account Members](#operation/AddAccountMembers) API.\n\n```json\n{\n\"account\": {\n\"id\": \"82c338f4-3cb7-4d9b-be2a-4b077c82ee3a\",\n\"members\": [{\n\"identity_id\": \"0f5d8475-33f3-4ebd-88a0-66dedc2581c1\",\n\"roles\": [\"BENEFICIAL_OWNER\"]\n}, {\n\"identity_id\": \"0d26f878-298e-4d47-81be-cdf4e982a3d3\",\n\"roles\": [\"FINANCIAL_ADVISOR\"]\n}, {\n\"identity_id\": \"012k23eb-298e-4d47-81be-cdf4e982a3d3\",\n\"roles\": [\"AUTHORIZED_USER\"]\n}]\n}\n}\n```\n\n### Removing an account member\nTo remove an existing account member and retain other needed members, the `members` field must contain \nthe existing account members without the account member you'd like to remove. The below example removes an `AUTHORIZED_USER` from the account.\n\nNote, this API requires the `members` array to have at least one element. In order to delete all members \nfrom an account, clients should use the [Delete Account Member](#operation/DeleteAccountMember) API.\n\n```json\n{\n\"account\": {\n\"id\": \"82c338f4-3cb7-4d9b-be2a-4b077c82ee3a\",\n\"members\": [{\n\"identity_id\": \"0f5d8475-33f3-4ebd-88a0-66dedc2581c1\",\n\"roles\": [\"BENEFICIAL_OWNER\"]\n}]\n}\n}\n```\n\n### Updating an account members' roles\nTo update an account members' roles, the `members` field must contain all the existing members with their roles along \nwith the additional role that you'd like to add or remove. The below example adds the `FINANCIAL_ADVISOR` role to an member that is already a `BENEFICIAL_OWNER`.\n\n```json\n{\n\"account\": {\n\"id\": \"82c338f4-3cb7-4d9b-be2a-4b077c82ee3a\",\n\"members\": [{\n\"identity_id\": \"0f5d8475-33f3-4ebd-88a0-66dedc2581c1\",\n\"roles\": [\"BENEFICIAL_OWNER\", \"FINANCIAL_ADVISOR\"]\n}]\n}\n}\n```", + "operationId": "UpdateAccount", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Account" + }, + "example": { + "created_at": "2014-02-20T04:22:22.222221Z", + "id": "79c27a0e-46a2-4276-9769-e1ebc055fa72", + "identity_id": "0acd56b7-140b-4b29-83e4-7e717f03afd9", + "members": [ + { + "identity_id": "11a3122a-0c50-4950-9934-2ad48a782b78", + "roles": [ + "FINANCIAL_ADVISOR" + ] + }, + { + "identity_id": "08ba6b70-bcc0-4e4a-a67f-1d28842dedfc", + "roles": [ + "AUTHORIZED_USER" + ] + }, + { + "identity_id": "2dedfc70-a67f-4e4a-bcc0-1d288408ba6b", + "roles": [ + "BENEFICIAL_OWNER" + ] + } + ], + "summary_status": "PENDING", + "updated_at": "2022-02-24T04:20:22.222222Z" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAccountRequest" + }, + "example": { + "account": { + "id": "79c27a0e-46a2-4276-9769-e1ebc055fa72", + "members": [ + { + "identity_id": "11a3122a-0c50-4950-9934-2ad48a782b78", + "roles": [ + "FINANCIAL_ADVISOR" + ] + }, + { + "identity_id": "08ba6b70-bcc0-4e4a-a67f-1d28842dedfc", + "roles": [ + "AUTHORIZED_USER" + ] + }, + { + "identity_id": "2dedfc70-a67f-4e4a-bcc0-1d288408ba6b", + "roles": [ + "BENEFICIAL_OWNER" + ] + } + ] + } + } + } + }, + "required": true + }, + "tags": [ + "Accounts" + ], + "security": [ + { + "OAuth2": [ + "identity:write_account" + ] + } + ] + } + }, + "/identity/accounts/{id}": { + "get": { + "operationId": "GetAccount", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Account" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "uuid id of account", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Accounts" + ], + "security": [ + { + "OAuth2": [ + "identity:read_account" + ] + } + ] + } + }, + "/identity/account-members": { + "post": { + "summary": "Add Account Members", + "description": "Add one or more account members to a given account.\n\nThe account members added by this API do not affect existing account members. For example,\nif an account has two members, and one member is added using this API, then the account will\nend up with three members.\n\nFor more information on properties of account members, see [Account Members](#account-members).", + "operationId": "AddAccountMembers", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddAccountMembersResponse" + }, + "examples": { + "Add Institution Members": { + "value": { + "account_id": "79c27a0e-46a2-4276-9769-e1ebc055fa72", + "members": [ + { + "identity_id": "11a3122a-0c50-4950-9934-2ad48a782b78", + "roles": [ + "FINANCIAL_ADVISOR" + ], + "id": "01516495-031a-4c6c-b277-5734ea9cb99c" + }, + { + "identity_id": "08ba6b70-bcc0-4e4a-a67f-1d28842dedfc", + "roles": [ + "AUTHORIZED_USER" + ], + "id": "1039d953-808f-495f-902d-c15480942885" + } + ] + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddAccountMembersRequest" + }, + "examples": { + "Add Account Members": { + "value": { + "account_id": "79c27a0e-46a2-4276-9769-e1ebc055fa72", + "members": [ + { + "identity_id": "11a3122a-0c50-4950-9934-2ad48a782b78", + "roles": [ + "FINANCIAL_ADVISOR" + ] + }, + { + "identity_id": "08ba6b70-bcc0-4e4a-a67f-1d28842dedfc", + "roles": [ + "AUTHORIZED_USER" + ] + } + ] + } + } + } + } + }, + "required": true + }, + "tags": [ + "Account Members" + ], + "security": [ + { + "OAuth2": [ + "identity:write_account" + ] + } + ] + } + }, + "/identity/account-members/{id}": { + "delete": { + "summary": "Remove Account Member", + "description": "Removes an account member from an account.", + "operationId": "DeleteAccountMember", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteAccountMemberResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The account member ID that should be removed from the account.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Account Members" + ], + "security": [ + { + "OAuth2": [ + "identity:write_account" + ] + } + ] + } + }, + "/identity/identities/{id}/sandbox-status": { + "put": { + "summary": "Sandbox Set Identity Status", + "description": "Set the various statuses for the given Identity. To enable the Person Identity to transact,\nset both `id_verification_status` and `sanctions_verification_status` to `\"APPROVED\"`.\nTo enable the Institution to transact, set both `sanctions_verification_status` to `\"APPROVED\"`.\nThis endpoint also allows you to set the statuses for `document_verification_status` and\n`additional_screening_status`", + "operationId": "SandboxSetIdentityStatus", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboxSetIdentityResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentitySandboxSandboxSetIdentityStatusBody" + } + } + }, + "required": true + }, + "tags": [ + "Sandbox Identity" + ], + "security": [ + { + "OAuth2": [ + "identity:write_identity" + ] + } + ] + } + }, + "/all-markets/prices": { + "get": { + "summary": "List Prices", + "description": "Retrieve current prices, as well as 24 hour prior (yesterday) prices, for the specified markets.\nAny single market that failed to be retrieved is excluded from the response.", + "operationId": "ListPrices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListPricesResponse" + }, + "examples": { + "response": { + "value": { + "prices": [ + { + "market": "BTCUSD", + "current_price": "16627.62", + "yesterday_price": "16703.29", + "snapshot_at": "2023-01-03T18:27:40.294528Z" + }, + { + "market": "ETHUSD", + "current_price": "1206.93", + "yesterday_price": "1216.55", + "snapshot_at": "2023-01-03T18:27:40.294528Z" + } + ] + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "markets", + "description": "", + "in": "query", + "required": true, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ETHUSD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD" + ] + } + } + } + ], + "tags": [ + "Pricing" + ] + } + }, + "/all-markets/ticker": { + "get": { + "summary": "List Tickers", + "description": "Retrieves order book statistics of the exchange for all markets over the last 24 hours and from midnight UTC until current time.\n\nPlease note: List Tickers displays pricing from external venues when the itBit exchange is not available.", + "operationId": "ListTickers", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListTickersResponse" + }, + "examples": { + "response": { + "value": [ + { + "market": "BTCUSD", + "best_bid": { + "price": "9245.25", + "amount": "0.23124212" + }, + "best_ask": { + "price": "9274.00", + "amount": "1.82341000" + }, + "last_execution": { + "price": "9273.75", + "amount": "0.00002341" + }, + "last_day": { + "high": "10425.25", + "low": "8923.50", + "open": "9324.50", + "volume": "1423.12314232", + "start_time": "2020-01-17T18:36:08.737Z", + "end_time": "2020-01-18T18:36:08.737Z" + }, + "today": { + "high": "10125.25", + "low": "9100.25", + "open": "9502.50", + "volume": "872.12314232", + "start_time": "2020-01-18T00:00:00.000Z", + "end_time": "2020-01-18T18:36:08.737Z" + }, + "snapshot_at": "2020-01-17T18:36:08.737Z" + }, + { + "market": "ETHUSD", + "best_bid": { + "price": "136.25", + "amount": "0.14532168" + }, + "best_ask": { + "price": "138.00", + "amount": "1.72742000" + }, + "last_execution": { + "price": "137.75", + "amount": "0.00003156" + }, + "last_day": { + "high": "136.75", + "low": "135.25", + "open": "135.25", + "volume": "423.67235137", + "start_time": "2020-01-17T18:36:08.737Z", + "end_time": "2020-01-18T18:36:08.737Z" + }, + "today": { + "high": "135.15", + "low": "134.13", + "open": "134.13", + "volume": "472.12314232", + "start_time": "2020-01-18T00:00:00.000Z", + "end_time": "2020-01-18T18:36:08.737Z" + }, + "snapshot_at": "2020-01-17T18:36:08.737Z" + } + ] + } + } + } + } + } + }, + "tags": [ + "Pricing" + ] + } + }, + "/executions": { + "get": { + "summary": "List Executions", + "description": "Retrieves full details of underlying executions with optional filters.\nNotes:\n- This endpoint returns a maximum of 1000 items per page.\n- Filtering options are `account_id`, `profile_id` or neither (all executions).", + "operationId": "ListExecutions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListExecutionsResponse" + }, + "examples": { + "response": { + "value": { + "items": [ + { + "execution_id": "12422531", + "order_id": "cb379c30-a9f8-4685-aa38-47d6e87ff09d", + "executed_at": "2022-08-01T21:01:27.217Z", + "market": "BTCUSD", + "side": "BUY", + "amount": "0.00432539", + "price": "23119.25", + "commission": "0.34999920465125", + "commission_asset": "USD", + "rebate": "0", + "rebate_asset": "USD", + "gross_trade_amount": "99.9997727575" + } + ], + "next_page_cursor": "CgwI-Iu6iQYQgPGVoQEQg5v2BQ" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "Filter executions by the Profile ID associated with the orders.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "account_id", + "description": "Filter executions by the Account ID associated with the orders.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "order_id", + "description": "Filter executions for a single order ID.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "since_execution_id", + "description": "Excludes executions after the given ID.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "range.begin", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "range.end", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page_cursor", + "description": "Cursor token for fetching the next page.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "description": "Number of results to return.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "tags": [ + "Orders" + ], + "security": [ + { + "OAuth2": [ + "exchange:read_order" + ] + } + ] + } + }, + "/markets": { + "get": { + "summary": "List Markets", + "description": "Retrieves the set of current available markets for trading with details.", + "operationId": "ListMarkets", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListMarketsResponse" + }, + "examples": { + "response": { + "value": { + "markets": [ + { + "market": "BTCUSD", + "base_asset": "BTC", + "quote_asset": "USD", + "tick_rate": "0.25" + } + ] + } + } + } + } + } + } + }, + "tags": [ + "Market Data" + ] + } + }, + "/markets/{market}/historical-prices": { + "get": { + "summary": "List Historical Prices", + "description": "Retrieves a set of average prices at a certain increment of time for the requested market.\nThis endpoint is suitable for retrieving historical average price trends where price precision, execution, and\nother detailed information is not required.\nTo control the count, use either `increment` or `max_data_points`.\nList Historical Prices returns an error when an unexpected value is given, or when `increment` and\n `max_data_points` are both given or omitted.\n\nWhen `range.begin` is omitted, the first data point shows the mid price, the average of the order book best bid\n and ask price, or the earliest available date. It is possible to set `range.begin` to a future date without error.\n\nWhen `range.end` is omitted, the last data point will display current mid price (average of order book best bid\n and best ask) at the request timestamp. It is possible to set `range.end` to a future date without error.\n\nWhen `pagination.limit` is omitted, the pagination limit will default to return the first 100 items.\nIf the pagination limit is set, the API will return up to the limit in one response. The pagination limit max is 1,000.\n\nTime-series items are returned in chronological (ascending) order. All timestamps are in UTC.", + "operationId": "ListHistoricalPrices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListHistoricalPricesResponse" + }, + "examples": { + "response": { + "value": { + "market": "BTCUSD", + "prices": [ + { + "average_price": "9245.50", + "timestamp": "2020-01-17T18:36:00.000Z" + }, + { + "average_price": "9265.50", + "timestamp": "2020-01-17T18:37:00.000Z" + } + ], + "total_count": 50 + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "market", + "description": "Market of Order Book.", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHUSD", + "BTCEUR", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "ETHGBP", + "BTCGBP", + "LTCGBP", + "BCHGBP", + "USDPUSD", + "ETHBRL", + "BTCBRL", + "LTCBRL", + "BCHBRL", + "USDPGBP", + "USDPBRL", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD", + "AAVEMXN", + "BCHMXN", + "BTCMXN", + "ETHMXN", + "LTCMXN", + "USDPMXN", + "AAVEEUR", + "BCHEUR", + "LTCEUR", + "LINKEUR", + "MATICEUR", + "PAXGEUR", + "SOLEUR", + "USDPEUR", + "UNIEUR", + "PYUSDEUR", + "PYUSDGBP" + ] + } + }, + { + "name": "max_data_points", + "description": "Maximum number of data points to return.\n\nThe time frame of the increments will be inferred by finding the most granular increment without breaching the `max_data_points` value based on a set of recording data points.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "range.begin", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "range.end", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "pagination.limit", + "description": "Number of results to return", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "pagination.offset", + "description": "Number of results to skip", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "increment", + "description": "Time increment between prices. Returns data exclusive from `range.begin` and `range.end`. Do not use with `max_data_points`, as this results in an error.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ONE_MINUTE", + "FIVE_MINUTES", + "FIFTEEN_MINUTES", + "THIRTY_MINUTES", + "ONE_HOUR", + "TWO_HOURS", + "TWELVE_HOURS", + "ONE_DAY", + "ONE_WEEK", + "TWO_WEEKS", + "FOUR_WEEKS" + ] + } + } + ], + "tags": [ + "Pricing" + ], + "security": [ + { + "OAuth2": [ + "exchange:historical_prices" + ] + } + ] + } + }, + "/markets/{market}/order-book": { + "get": { + "summary": "Get Order Book", + "description": "Retrieves the full list of bids and asks of the order book at individual price levels with resting quantities per level.", + "operationId": "GetOrderBook", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOrderBookResponse" + }, + "examples": { + "response": { + "value": { + "market": "BTCUSD", + "asks": [ + { + "price": "9240.25", + "amount": "1.2341300" + }, + { + "price": "9260.75", + "amount": "0.8134231" + } + ], + "bids": [ + { + "price": "9220.50", + "amount": "3.7441300" + }, + { + "price": "9123.00", + "amount": "0.2334231" + } + ] + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "market", + "description": "Market of Order Book.", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHSGD", + "ETHUSD", + "BTCEUR", + "BTCSGD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "ETHBRL", + "BTCBRL", + "LTCBRL", + "BCHBRL", + "USDPGBP", + "USDPBRL", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD", + "AAVEMXN", + "BCHMXN", + "BTCMXN", + "ETHMXN", + "LTCMXN", + "USDPMXN", + "AAVEEUR", + "BCHEUR", + "LTCEUR", + "LINKEUR", + "MATICEUR", + "PAXGEUR", + "SOLEUR", + "USDPEUR", + "UNIEUR", + "PYUSDEUR" + ] + } + } + ], + "tags": [ + "Market Data" + ] + } + }, + "/markets/{market}/recent-executions": { + "get": { + "summary": "List Recent Executions", + "description": "Retrieves the list of 2000 most recent executions by all users to occur in the order book.", + "operationId": "ListRecentExecutions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListRecentExecutionsResponse" + }, + "examples": { + "response": { + "value": { + "items": [ + { + "match_number": "5K8U4TTBKS1E", + "price": "9245.50", + "amount": "0.23421231", + "executed_at": "2020-01-17T18:36:38.737Z" + }, + { + "match_number": "5K8U4TTBKRIO", + "price": "9237.50", + "amount": "1.68421231", + "executed_at": "2020-01-17T18:36:52.737Z" + } + ] + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "market", + "description": "Market of the executions.", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHSGD", + "ETHUSD", + "BTCEUR", + "BTCSGD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "ETHBRL", + "BTCBRL", + "LTCBRL", + "BCHBRL", + "USDPGBP", + "USDPBRL", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD", + "AAVEMXN", + "BCHMXN", + "BTCMXN", + "ETHMXN", + "LTCMXN", + "USDPMXN", + "AAVEEUR", + "BCHEUR", + "LTCEUR", + "LINKEUR", + "MATICEUR", + "PAXGEUR", + "SOLEUR", + "USDPEUR", + "UNIEUR", + "PYUSDEUR" + ] + } + } + ], + "tags": [ + "Market Data" + ] + } + }, + "/markets/{market}/ticker": { + "get": { + "summary": "Get Ticker", + "description": "Retrieves order book statistics of the exchange over the last 24 hours and from midnight UTC until current time.", + "operationId": "GetTicker", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TickerRecord" + }, + "examples": { + "response": { + "value": { + "market": "BTCUSD", + "best_bid": { + "price": "9245.25", + "amount": "0.23124212" + }, + "best_ask": { + "price": "9274.00", + "amount": "1.82341000" + }, + "last_execution": { + "price": "9273.75", + "amount": "0.00002341" + }, + "last_day": { + "high": "10425.25", + "low": "8923.50", + "open": "9324.50", + "volume": "1423.12314232", + "start_time": "2020-01-17T18:36:08.737Z", + "end_time": "2020-01-18T18:36:08.737Z" + }, + "today": { + "high": "10125.25", + "low": "9100.25", + "open": "9502.50", + "volume": "872.12314232", + "start_time": "2020-01-18T00:00:00.000Z", + "end_time": "2020-01-18T18:36:08.737Z" + }, + "snapshot_at": "2020-01-17T18:36:08.737Z" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "market", + "description": "Market of the Ticker.", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHSGD", + "ETHUSD", + "BTCEUR", + "BTCSGD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "ETHBRL", + "BTCBRL", + "LTCBRL", + "BCHBRL", + "USDPGBP", + "USDPBRL", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD", + "AAVEMXN", + "BCHMXN", + "BTCMXN", + "ETHMXN", + "LTCMXN", + "USDPMXN", + "AAVEEUR", + "BCHEUR", + "LTCEUR", + "LINKEUR", + "MATICEUR", + "PAXGEUR", + "SOLEUR", + "USDPEUR", + "UNIEUR", + "PYUSDEUR" + ] + } + } + ], + "tags": [ + "Market Data" + ] + } + }, + "/orders": { + "get": { + "summary": "List Orders", + "description": "Retrieves full details of orders associated with a Profile ID, with optional filters.\n\n- Historical data prior to May 16, 2022 is unavailable.\n- Pagination Limit has a max of 1000. Pagination Offset is now deprecated and nonfunctional.\n- Filtering options are `account_id`, `profile_id` or neither (all orders).", + "operationId": "ListOrders", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListOrdersResponse" + }, + "examples": { + "response": { + "value": { + "items": [ + { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "ref_id": "my-order-1", + "status": "FILLED", + "market": "ETHUSD", + "side": "BUY", + "type": "LIMIT", + "price": "190.23", + "base_amount": "2.35781498", + "quote_amount": "0", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + }, + "amount_filled": "2.35781498", + "volume_weighted_average_price": "190.23", + "time_in_force": "GTC", + "is_triggered": false + }, + { + "id": "81e26e1d-eddb-455a-8b44-e3d845432de7", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "ref_id": "my-order-2", + "status": "FILLED", + "market": "BTCUSD", + "side": "BUY", + "type": "MARKET", + "price": "0", + "base_amount": "0", + "quote_amount": "500.00", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + }, + "amount_filled": "0.05142181", + "volume_weighted_average_price": "9723.50", + "time_in_force": "FOK", + "is_triggered": false + } + ], + "next_page_cursor": "CgsIxom6iQYQwO39XBDbsdVz" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The profile associated with the orders.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "account_id", + "description": "The account under which these orders are placed.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "market", + "description": "Filter by the trading pair.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHSGD", + "ETHUSD", + "BTCEUR", + "BTCSGD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD" + ] + } + }, + { + "name": "status", + "description": "Filter by the status of the order.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "PENDING_SUBMISSION", + "SUBMITTED", + "OPEN", + "FILLED", + "CANCELLED", + "REJECTED" + ] + } + }, + { + "name": "order_time.begin", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "order_time.end", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "ref_ids", + "description": "The idempotence IDs provided during order creation.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "page_cursor", + "description": "Cursor token for fetching the next page. If using this then do not use paginationLimit and paginationOffset fields.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "description": "Number of results to return. If using this then do not use paginationLimit and paginationOffset fields.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "tags": [ + "Orders" + ], + "security": [ + { + "OAuth2": [ + "exchange:read_order" + ] + } + ] + } + }, + "/profiles/{profile_id}/executions": { + "get": { + "summary": "List Executions", + "description": "Retrieves full details of underlying executions for a profile id with optional filters.\nIf pagination details are not set the response will default to 20 items. Additionally, this endpoint will return a maximum of 500 items per page.", + "operationId": "ListProfileExecutions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListExecutionsResponse" + }, + "examples": { + "response": { + "value": { + "items": [ + { + "execution_id": "1600103", + "order_id": "248ffda4-83a0-4033-a5bb-8929d523f59f", + "executed_at": "2020-01-17T18:36:08.737Z", + "market": "BTCUSD", + "side": "BUY", + "amount": "29579.67560314", + "price": "9123.50", + "commission": "17.747802", + "commission_asset": "USD", + "rebate": "0.00", + "rebate_asset": "USD" + }, + { + "execution_id": "1600104", + "order_id": "248ffda4-83a0-4033-a5bb-8929d523f59f", + "executed_at": "2020-01-17T18:36:08.737Z", + "market": "BTCUSD", + "side": "SELL", + "amount": "29579.67560314", + "price": "9123.50", + "commission": "0", + "commission_asset": "USD", + "rebate": "8.873901", + "rebate_asset": "USD" + } + ], + "next_page_cursor": "CgsIxom6iQYQwO39XBDbsdVz" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The ProfileId associated with the orders.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "order_id", + "description": "Filter executions for a single order id.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "since_execution_id", + "description": "Excludes executions after this id.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "range.begin", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "range.end", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page_cursor", + "description": "Cursor token for fetching the next page.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "description": "Number of results to return.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "tags": [ + "ExchangePublic" + ], + "security": [ + { + "OAuth2": [ + "exchange:read_order" + ] + } + ] + } + }, + "/profiles/{profile_id}/orders": { + "get": { + "summary": "List Orders", + "description": "Retrieves full details of orders associated with a profile id with optional filters.\n\nNotes:\n- Pagination Limit has a max of 1000 and Pagination Offset a max of 10000. If a larger Offset is needed, please contact support.", + "operationId": "ListProfileOrders", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListOrdersResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The ProfileId associated with the orders.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "market", + "description": "Filter by the trading pair.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHSGD", + "ETHUSD", + "BTCEUR", + "BTCSGD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD" + ] + } + }, + { + "name": "status", + "description": "Filter by the status of the order.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "PENDING_SUBMISSION", + "SUBMITTED", + "OPEN", + "FILLED", + "CANCELLED", + "REJECTED" + ] + } + }, + { + "name": "order_time.begin", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "order_time.end", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "ref_ids", + "description": "The idempotence ids provided during order creation.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "page_cursor", + "description": "Cursor token for fetching the next page. If using this then do not use paginationLimit and paginationOffset fields.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "description": "Number of results to return. If using this then do not use paginationLimit and paginationOffset fields.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "tags": [ + "ExchangePublic" + ], + "security": [ + { + "OAuth2": [ + "exchange:read_order" + ] + } + ] + }, + "post": { + "summary": "Create Order", + "description": "For limit orders, create an order for buying or selling an asset:\n\n- To buy, set `side = BUY` and set `base_amount` to the crypto amount you want to buy.\n- To sell, set `side = SELL` and set `base_amount` to the crypto amount you want to sell.\n\nFor market orders, create an order for buying or selling an asset:\n\n- To buy, set `side = BUY` and set `quote_amount` to the dollar amount you want to spend.\n- To sell, set `side = SELL` and set `base_amount` to the crypto amount you want to sell.\n\nThere are five types of orders:\n\n- Limit Orders: Buy or sell at a specified price or better. Execution not guaranteed. Taker orders will be rejected if price deviates 15% from midpoint.\n- Post-Only Limit Orders: have the same properties as Limit Orders, but get rejected if they cross the orderbook.\n- Market Orders: Operate as Immediate or Cancel (IOC) orders. Price is variable, executes at best available price at time of order.\n- Stop Market Orders: Will convert to a market sell order with the specified quantity when the stop price is hit. The stop price does not guarantee that it will be executed at that price. Market conditions (price) might change between the order being triggered and order being executed. Currently only sell stop loss orders are supported.\n- Stop Limit Orders: have a Stop Price which when hit, will convert to a limit sell order that will be executed at a specified price (or better)\n\nMaximum notional order size by type:\n\nOrder Type | Market | Maximum Notional Value (USD)\n---------- | ------- | ----------------------------\nMarket | all | 500,000\nLimit | BTCUSD | 1,500,000\nLimit | ETHUSD | 1,500,000\nLimit | other | 1,000,000", + "operationId": "CreateOrder", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Order" + }, + "examples": { + "response": { + "value": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "ref_id": "my-order-1", + "status": "SUBMITTED", + "market": "ETHUSD", + "side": "BUY", + "type": "LIMIT", + "price": "190.23", + "base_amount": "2.35781498", + "quote_amount": "", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + }, + "amount_filled": "0.00000000", + "volume_weighted_average_price": "0.00000000", + "time_in_force": "GTC" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/bad_request_trade" + }, + "403": { + "description": "Could not create order", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient Funds": { + "$ref": "#/components/examples/Problem_insufficient_funds" + }, + "Notional Value Too Large": { + "$ref": "#/components/examples/Problem_notional_value_too_large" + }, + "Market Conditions Prevented Execution": { + "$ref": "#/components/examples/Problem_market_conditions_prevented_execution" + } + } + } + } + }, + "409": { + "description": "Order already created", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Already Exists": { + "$ref": "#/components/examples/Problem_already_exists_order" + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The profileId the order will be associated with.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExchangePublicCreateOrderBody" + }, + "examples": { + "Limit Buy": { + "value": { + "side": "BUY", + "market": "ETHUSD", + "type": "LIMIT", + "price": "190.23", + "base_amount": "2.35781498", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + }, + "Limit Sell": { + "value": { + "side": "SELL", + "market": "ETHUSD", + "type": "LIMIT", + "price": "190.23", + "base_amount": "2.35781498", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + }, + "Market Buy": { + "value": { + "side": "BUY", + "market": "ETHUSD", + "type": "MARKET", + "quote_amount": "300.00", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + }, + "Market Sell": { + "value": { + "side": "SELL", + "market": "ETHUSD", + "type": "MARKET", + "base_amount": "3.48127123", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + } + } + } + }, + "required": true + }, + "tags": [ + "Orders" + ], + "security": [ + { + "OAuth2": [ + "exchange:write_order" + ] + } + ] + } + }, + "/profiles/{profile_id}/orders/{id}": { + "get": { + "summary": "Get Order", + "description": "Retrieves the current state of an order.\n- Historical data prior to May 16, 2022 is unavailable.", + "operationId": "GetOrder", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Order" + }, + "examples": { + "response": { + "value": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "ref_id": "my-order-1", + "status": "SUBMITTED", + "market": "ETHUSD", + "side": "BUY", + "type": "LIMIT", + "price": "190.23", + "base_amount": "2.35781498", + "quote_amount": "", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + }, + "amount_filled": "0.00000000", + "volume_weighted_average_price": "0.00000000", + "time_in_force": "GTC", + "is_triggered": false + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The profile ID associated with the order.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "description": "The UUID of the Order.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Orders" + ], + "security": [ + { + "OAuth2": [ + "exchange:read_order" + ] + } + ] + }, + "delete": { + "summary": "Cancel Order", + "description": "Submits a cancellation request. A response indicates that the request has been acknowledged and provides no\nguarantee the order has been cancelled.", + "operationId": "CancelOrder", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CancelOrderResponse" + }, + "examples": { + "response": { + "value": {} + } + } + } + } + }, + "403": { + "description": "Could not cancel order", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Cancellable": { + "$ref": "#/components/examples/Problem_forbidden_order_cancel" + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The profile ID associated with the order.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "description": "The UUID of the Order.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Orders" + ], + "security": [ + { + "OAuth2": [ + "exchange:write_order" + ] + } + ] + } + }, + "/profiles/{profile_id}/quote-executions": { + "get": { + "summary": "List Quote Executions", + "description": "List quote executions within a particular profile.", + "operationId": "ListQuoteExecutions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListQuoteExecutionsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The profile ID associated with the orders.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "side", + "description": "Filter by buy or sell side.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "BUY", + "SELL" + ] + } + }, + { + "name": "market", + "description": "Filter by the trading pair.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHSGD", + "ETHUSD", + "BTCEUR", + "BTCSGD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD" + ] + } + }, + { + "name": "status", + "description": "Filter by the status of the order.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED", + "SETTLED" + ] + } + }, + { + "name": "created_at.begin", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.end", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Return items in ascending (ASC) or descending (DESC) order.\nDefault order is descending (DESC).", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "order_by", + "description": "The specific method by which the returned results will be ordered.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + } + }, + { + "name": "page_cursor", + "description": "Cursor token for fetching the next page. If using this then do not use `pagination.limit` and `pagination.offset` fields.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Quote Executions" + ], + "security": [ + { + "OAuth2": [ + "exchange:read_quote_execution" + ] + } + ] + }, + "post": { + "summary": "Create Quote Execution", + "description": "Execute on a quote for buying or selling an asset.\n\nThe side, market, and guaranteed price of the execution are specified by the quote\nwith ID `quote_id`.\n\nThe amount to buy or sell must be specified in either fiat or crypto by setting\nexactly one of:\n - `base_amount` to specify the amount of crypto to buy or sell.\n - `quote_amount` to specify the amount of fiat to spend or acquire.\n\nAn otherwise-valid request to create a quote execution may fail with the following\ntypes of errors:\n - [Expired](https://developer.paxos.com/docs/v2/problems/expired) if the quote\n with ID `quote_id` has expired.\n - [Insufficient Funds](https://developer.paxos.com/docs/v2/problems/insufficient-funds)\n if the profile with ID `profile_id` has insufficient available balance to\n fund the execution.\n - [Rejected](https://developer.paxos.com/docs/v2/problems/rejected) if extreme\n market conditions (e.g. a very large price swing) have invalidated the quote.\n - [Already Exists](https://developer.paxos.com/docs/v2/problems/already-exists)\n if a Quote Execution with the same `ref_id` has already been created.", + "operationId": "CreateQuoteExecution", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QuoteExecution" + }, + "examples": { + "Buy $100 BTC": { + "value": { + "id": "43a59965-be3a-45ab-841d-c55386e0ff90", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "quote_id": "366a26d2-3098-4226-a520-4bb43ae4d922", + "status": "CREATED", + "market": "BTCUSD", + "side": "BUY", + "price": "6001.2", + "base_amount": "0.016663334", + "base_asset": "BTC", + "quote_amount": "100.00", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:31.345Z", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + }, + "Sell 2 ETH": { + "value": { + "id": "43a59965-be3a-45ab-841d-c55386e0ff90", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "quote_id": "5a336768-5bc1-4401-9d95-9cb251ce4b58", + "status": "CREATED", + "market": "ETHUSD", + "side": "SELL", + "price": "224.11", + "base_amount": "2", + "base_asset": "ETH", + "quote_amount": "448.22", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:31.345Z", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + } + } + } + } + }, + "403": { + "description": "Could not create quote execution", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Expired": { + "$ref": "#/components/examples/Problem_expired_quote" + }, + "Insufficient Funds": { + "$ref": "#/components/examples/Problem_insufficient_funds" + }, + "Rejected": { + "$ref": "#/components/examples/Problem_rejected" + } + } + } + } + }, + "404": { + "description": "Could not find quote", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "$ref": "#/components/examples/Problem_not_found_quote" + } + } + } + } + }, + "409": { + "description": "Quote Execution Already Exists", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Already Exists": { + "$ref": "#/components/examples/Problem_already_exists_quote_execution" + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The ID of the profile under which to execute this order.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExchangePublicCreateQuoteExecutionBody" + }, + "examples": { + "Buy $100 BTC": { + "value": { + "quote_id": "366a26d2-3098-4226-a520-4bb43ae4d922", + "quote_amount": "100", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + }, + "Sell 2 ETH": { + "value": { + "quote_id": "5a336768-5bc1-4401-9d95-9cb251ce4b58", + "base_amount": "2", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + } + } + } + }, + "required": true + }, + "tags": [ + "Quote Executions" + ], + "security": [ + { + "OAuth2": [ + "exchange:write_quote_execution" + ] + } + ] + } + }, + "/profiles/{profile_id}/quote-executions/{id}": { + "get": { + "summary": "Get Quote Execution", + "description": "Get an existing quote execution for buying or selling an asset.", + "operationId": "GetQuoteExecution", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QuoteExecution" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Quote Executions" + ], + "security": [ + { + "OAuth2": [ + "exchange:read_quote_execution" + ] + } + ] + } + }, + "/quotes": { + "get": { + "summary": "List Quotes", + "description": "List quotes for buying or selling assets. By default, the list will\ninclude the latest available quotes for both buying and selling all supported\nassets.\n\nEach quote is valid until `expires_at`, and can be executed on by\ncalling [Create Quote Execution](#operation/CreateQuoteExecution).\n\nMultiple calls to list quotes in quick succession may return the same quote\nvalues. Paxos currently issues new quotes at most once per second.", + "operationId": "ListQuotes", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListQuotesResponse" + }, + "examples": { + "Get Latest USD Quotes": { + "value": { + "items": [ + { + "id": "366a26d2-3098-4226-a520-4bb43ae4d922", + "market": "BTCUSD", + "side": "BUY", + "price": "6001.2", + "base_asset": "BTC", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:08Z", + "expires_at": "2020-01-17T18:36:38Z" + }, + { + "id": "71e2a297-f2d7-423c-8e4f-486aac70fa9f", + "market": "BTCUSD", + "side": "SELL", + "price": "5999.8", + "base_asset": "BTC", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:08Z", + "expires_at": "2020-01-17T18:36:38Z" + }, + { + "id": "ee018e41-0379-41c6-a099-1ea81204b192", + "market": "ETHUSD", + "side": "BUY", + "price": "225.88", + "base_asset": "ETH", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:08Z", + "expires_at": "2020-01-17T18:36:38Z" + }, + { + "id": "5a336768-5bc1-4401-9d95-9cb251ce4b58", + "market": "ETHUSD", + "side": "SELL", + "price": "224.11", + "base_asset": "ETH", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:08Z", + "expires_at": "2020-01-17T18:36:38Z" + } + ] + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "markets", + "description": "", + "in": "query", + "required": true, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHSGD", + "ETHUSD", + "BTCEUR", + "BTCSGD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD" + ] + } + } + } + ], + "tags": [ + "Quotes" + ], + "security": [ + { + "OAuth2": [ + "exchange:read_quote" + ] + } + ] + } + }, + "/sandbox/fiat-deposits": { + "post": { + "summary": "Initiate Sandbox Fiat Deposit", + "description": "Initiate a test fiat deposit in the sandbox environment.\n\nThe deposit will be processed based on `memo_id` from a previous Fiat Deposit Instructions response.\n\n*This functionality is only available in the sandbox environment.*", + "operationId": "InitiateSandboxFiatDeposit", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitiateSandboxFiatDepositResponse" + }, + "example": {} + } + } + }, + "400": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "fiat network instructions required" + } + } + }, + "description": "Bad Request" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitiateSandboxFiatDepositRequest" + }, + "example": { + "amount": "10.00", + "asset": "USD", + "memo_id": "3CFXQSCMSPLFHXLZ", + "fiat_network_instructions": { + "wire": { + "account_number": "12345678", + "fiat_account_owner_address": { + "country": "USA", + "address1": "456 Main Street, NY", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + }, + "routing_details": { + "routing_number_type": "ABA", + "routing_number": "123456789", + "bank_name": "Customers Bank", + "bank_address": { + "country": "USA", + "address1": "123 Bank Street", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + } + } + } + }, + "fiat_account_owner": { + "institution_details": { + "name": "SomeCorp, Inc." + } + } + } + } + }, + "required": true + }, + "tags": [ + "Sandbox Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_sandbox_fiat_deposit" + ] + } + ] + } + }, + "/transfer/crypto-deposits/{id}/reject": { + "post": { + "summary": "Reject Crypto Deposit", + "description": "Reject a crypto deposit which is waiting for required travel rule information about the originator address.\nIf the rejected deposit has any status other than `NEEDS_INFO`, the request will return an error.\nOnly the creator of the crypto deposit can reject it.", + "operationId": "RejectCryptoDeposit", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RejectCryptoDepositResponse" + }, + "example": {} + } + } + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "id must be uuid, given 2d929a0d-e1e3-4781-b7f8-7b34e66f" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "no crypto deposit found for id: 2d929a0d-e1e3-4781-b7f8-7b34e66f7832" + } + } + }, + "description": "Could not find deposit" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Conflict", + "status": 409, + "detail": "crypto deposit 2d929a0d-e1e3-4781-b7f8-7b34e66f7832 does not need info" + } + } + }, + "description": "Deposit does not need info" + } + }, + "parameters": [ + { + "name": "id", + "description": "Paxos ID of the crypto deposit to reject.\nTo retrieve the ID, log in to your Paxos account and go to the [Activity](https://account.paxos.com/wallet/activity) tab.\nDownload the CSV activity file and check the ID column.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferPublicRejectCryptoDepositBody" + } + } + }, + "required": true + }, + "tags": [ + "Crypto Deposits" + ], + "security": [ + { + "OAuth2": [ + "transfer:reject_crypto_deposit" + ] + } + ] + } + }, + "/transfer/crypto-deposits/{id}/update": { + "post": { + "summary": "Update Crypto Deposit", + "description": "Crypto deposits that do not meet the minimum travel rule requirements are blocked.\nTo update a crypto deposit, provide the required travel rule information about the originator address.", + "operationId": "UpdateCryptoDeposit", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCryptoDepositResponse" + }, + "example": {} + } + } + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "id must be uuid, given 2d929a0d-e1e3-4781-b7f8-7b34e66f" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "no crypto deposit found for id: 2d929a0d-e1e3-4781-b7f8-7b34e66f7832" + } + } + }, + "description": "Could not find deposit" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Conflict", + "status": 409, + "detail": "crypto deposit 2d929a0d-e1e3-4781-b7f8-7b34e66f7832 does not need info" + } + } + }, + "description": "Deposit does not need info" + } + }, + "parameters": [ + { + "name": "id", + "description": "Paxos ID of the crypto deposit to update.\nTo retrieve the ID, log in to your Paxos account and go to the [Activity](https://account.paxos.com/wallet/activity) tab.\nDownload the CSV activity file and check the ID column.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferPublicUpdateCryptoDepositBody" + } + } + }, + "required": true + }, + "tags": [ + "Crypto Deposits" + ], + "security": [ + { + "OAuth2": [ + "transfer:update_crypto_deposit" + ] + } + ] + } + }, + "/transfer/crypto-withdrawals": { + "post": { + "summary": "Create Crypto Withdrawal", + "description": "Withdraw a cryptocurrency asset to a specified destination address.\n\n**Important for Stellar Network (PYUSD):**\n\nWhen withdrawing PYUSD on the Stellar network, the destination address must have an established trustline with the PYUSD issuer:\n\n- **PYUSD Issuer**: `GDQE7IXJ4HUHV6RQHIUPRJSEZE4DRS5WY577O2FY6YQ5LVWZ7JZTU2V5` (mainnet)\n- **Asset Code**: `PYUSD`\n\n**How to Establish a Trustline:**\n\nThe recipient must use a Stellar wallet or the Stellar SDK to:\n1. Ensure their account has minimum XLM balance (at least 1 XLM recommended)\n2. Create a trustline to the PYUSD issuer for the PYUSD asset\n3. Confirm the trustline is active before requesting withdrawal\n\n**Verifying Trustline Status:**\n\nYou can verify if an address has the required trustline by:\n- Using Stellar blockchain explorers (e.g., stellar.expert)\n- Querying the Stellar Horizon API\n- Using the Stellar SDK to check account balances\n", + "operationId": "CreateCryptoWithdrawal", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transfer" + }, + "example": { + "id": "373b7966-4290-4be3-a604-51929173437b", + "customer_id": "72b2b4e6-d395-43d2-9b09-690fa6c1a664", + "profile_id": "1db50793-0a22-4d2a-8696-66fc4fd8e360", + "ref_id": "ABCZYX123", + "amount": "0.001", + "total": "0.00100223", + "fee": "0.00000223", + "asset": "BTC", + "balance_asset": "BTC", + "direction": "DEBIT", + "type": "CRYPTO_WITHDRAWAL", + "status": "PENDING", + "created_at": "2022-06-14T15:19:20.034294Z", + "updated_at": "2022-06-14T15:19:20.034294Z", + "destination_address": "1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2", + "crypto_network": "BITCOIN", + "auto_conversion": {} + } + } + } + }, + "403": { + "description": "Could not create transfer", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient Funds": { + "$ref": "#/components/examples/Problem_insufficient_funds" + }, + "Expired": { + "$ref": "#/components/examples/Problem_fee_expired_crypto_withdrawal" + } + } + } + } + }, + "404": { + "description": "Could not find fee quote", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "$ref": "#/components/examples/Problem_fee_not_found_crypto_withdrawal" + } + } + } + } + }, + "409": { + "description": "Transfer already exists", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Already Exists": { + "$ref": "#/components/examples/Problem_already_exists_crypto_withdrawal" + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCryptoWithdrawalRequest" + } + } + }, + "required": true + }, + "tags": [ + "Crypto Withdrawals" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_crypto_withdrawal" + ] + } + ] + } + }, + "/transfer/deposit-addresses": { + "get": { + "summary": "List Deposit Addresses", + "description": "List all deposit addresses, optionally filtering and paging the results.", + "operationId": "ListDepositAddresses", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListDepositAddressesResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_ids", + "description": "Optionally filter by the profile IDs associated with the deposit addresses. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "identity_ids", + "description": "Optionally filter by the Identities associated with the deposit addresses. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "ids", + "description": "Optionally filter by the UUIDs of the deposit addresses. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "ref_ids", + "description": "The client-specified IDs provided during transfer creation. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided. Maximum 1000.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Return items in ascending (ASC) or descending (DESC) order. Defaults to DESC.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "order_by", + "description": "The specific method by which the returned results will be ordered.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + } + }, + { + "name": "page_cursor", + "description": "Optional: Cursor for getting the next page of results.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "account_ids", + "description": "Optionally filter by the Accounts associated with the deposit address. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "Deposit Addresses" + ], + "security": [ + { + "OAuth2": [ + "transfer:read_deposit_address" + ] + } + ] + }, + "post": { + "summary": "Create Deposit Address", + "description": "Create a deposit address on a blockchain network for depositing to a profile.\n\n**Important for Stellar Network (PYUSD):**\n\nWhen creating a deposit address for PYUSD on the Stellar network:\n\n- Paxos automatically handles all necessary setup including trustline establishment\n- The deposit address is immediately ready to receive PYUSD tokens\n- No additional configuration is required by the user\n- The PYUSD issuer address on Stellar mainnet is: `GDQE7IXJ4HUHV6RQHIUPRJSEZE4DRS5WY577O2FY6YQ5LVWZ7JZTU2V5`\n- The PYUSD asset code is: `PYUSD`\n", + "operationId": "CreateDepositAddress", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DepositAddress" + } + } + } + }, + "409": { + "description": "Deposit address already exists", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Already Exists": { + "$ref": "#/components/examples/Problem_already_exists_deposit_address" + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDepositAddressRequest" + } + } + }, + "required": true + }, + "tags": [ + "Deposit Addresses" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_deposit_address" + ] + } + ] + } + }, + "/transfer/fees/crypto-withdrawal": { + "post": { + "summary": "Create Crypto Withdrawal Fee", + "description": "Get a guaranteed fee for the given currency, valid for a period of time.\nSpecify exactly one of `amount` or `total`, otherwise an error is returned.\n\nThe [Create Crypto Withdrawal](#operation/CreateCryptoWithdrawal) request that uses the guaranteed fee endpoint\nmust specify an `amount` less than or equal to the guaranteed fee `amount`, otherwise the withdrawal is rejected.", + "operationId": "CreateCryptoWithdrawalFee", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CryptoWithdrawalFee" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCryptoWithdrawalFeeRequest" + } + } + }, + "required": true + }, + "tags": [ + "Fees" + ], + "security": [ + { + "OAuth2": [ + "fee:write_crypto_withdrawal_fee" + ] + } + ] + } + }, + "/transfer/fiat-accounts": { + "get": { + "summary": "List Fiat Accounts", + "description": "List all Fiat Accounts, optionally filtering and paging the results.\nThe response includes an abbreviated `FiatAccount` object:\n\n- Beneficiary name and address details are excluded.\n- Only the last four (**4**) digits of the account number are included.\n\nUse [Get Fiat Account](#operation/GetFiatAccount) to retrieve the complete `FiatAccount` object.\n\nThe paginated results default to the maximum limit of 1,000 Fiat Accounts, unless otherwise specified with the `limit` parameter.\nEvery paginated response contains a `next_page` field until the last page is reached.\nPass the `next_page` value into the `page_cursor` field of the next request to retrieve the next page of results.", + "operationId": "ListFiatAccounts", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListFiatAccountsResponse" + }, + "example": { + "items": [ + { + "id": "dde1b3c5-d02a-48f6-8d11-16b4f532ea49", + "ref_id": "test_ref_id_1", + "identity_id": "c6ea91da-8f33-4545-9bdf-3cf29b4041d7", + "account_id": "91f91384-30d4-46c2-9118-7f3cec676a2c", + "fiat_account_owner": { + "person_details": null + }, + "fiat_network_instructions": { + "wire": { + "account_number": "XXXX5678", + "fiat_account_owner_address": null, + "routing_details": { + "routing_number_type": "ABA", + "routing_number": "123456789", + "bank_name": "Customers Bank", + "bank_address": null + }, + "status": "PENDING", + "metadata": { + "test_ref_id": "47aa7538-e2d2-47b3-8600-44a7965dd357", + "transaction_attempt": 1 + } + } + }, + "created_at": "2023-09-24T14:15:22Z", + "updated_at": "2023-09-24T14:15:22Z" + } + ] + } + } + } + } + }, + "parameters": [ + { + "name": "ids", + "description": "Optionally filter by the UUIDs of the accounts. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "ref_ids", + "description": "Optionally filter by the client-specified IDs provided during account creation. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided. Maximum 1000.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Return items in ascending (ASC) or descending (DESC) order. Defaults to DESC.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "order_by", + "description": "The specific method by which the returned results will be ordered. Defaults to CREATED_AT.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + } + }, + { + "name": "page_cursor", + "description": "Optional: Cursor for getting the next page of results.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "include_deleted", + "description": "Used to include deleted accounts in the response.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:read_fiat_account" + ] + } + ] + }, + "post": { + "summary": "Create Fiat Account", + "description": "Create an account to initiate a fiat withdrawal.\n\nFor U.S. wires, set `fiat_network_instructions` > `wire` > `routing_details` > `routing_number_type` to `ABA`. For international (SWIFT) wires, set `fiat_network_instructions` > `wire` > `routing_details` > `routing_number_type` to `SWIFT`.\nFor CUBIX, set `fiat_network_instructions` > `cubix` > `account_id`, and do not specify `routing_number_type`. For CUBIX, the `account_id` is the CUBIX account ID.", + "operationId": "CreateFiatAccount", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FiatAccount" + }, + "example": { + "id": "dde1b3c5-d02a-48f6-8d11-16b4f532ea49", + "ref_id": "test_ref_id_1", + "identity_id": "c6ea91da-8f33-4545-9bdf-3cf29b4041d7", + "account_id": "91f91384-30d4-46c2-9118-7f3cec676a2c", + "fiat_account_owner": { + "person_details": { + "first_name": "Jane", + "last_name": "Doe" + }, + "fiat_network_instructions": { + "wire": { + "account_number": "12345678", + "fiat_account_owner_address": { + "country": "USA", + "address1": "456 Main Street, NY", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + }, + "routing_details": { + "routing_number_type": "ABA", + "routing_number": "123456789", + "bank_name": "Customers Bank", + "bank_address": { + "country": "USA", + "address1": "123 Bank Street", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + } + } + }, + "status": "PENDING", + "metadata": { + "test_ref_id": "47aa7538-e2d2-47b3-8600-44a7965dd357", + "transaction_attempt": 1 + } + } + }, + "created_at": "2023-09-24T14:15:22Z" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "account_number must be set" + }, + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "account_number must be set" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 403, + "detail": "identity_id forbidden for first-party customers" + }, + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "identity_id forbidden for first-party customers" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "no fiat account found for id: 2d929a0d-e1e3-4781-b7f8-7b34e66f7832" + }, + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "no fiat account found for id: '2d929a0d-e1e3-4781-b7f8-7b34e66f7832'" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateFiatAccountRequest" + } + } + }, + "required": true + }, + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_fiat_account" + ] + } + ] + } + }, + "/transfer/fiat-accounts/{id}": { + "get": { + "summary": "Get Fiat Account", + "description": "Get a single Fiat Account by ID.\n\nIn the polling workflow, this endpoint can be called to monitor a FiatAccount's status.\nThe Fiat Account response includes the full account number, beneficiary name and address details.", + "operationId": "GetFiatAccount", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FiatAccount" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The Paxos fiat account ID (UUID).\nThe Fiat Account ID (`id`) is provided in the response of the [Create Fiat Account](#operation/CreateFiatAccount).\nUse this ID to retrieve the instructions using [Get Fiat Account](#operation/GetFiatAccount) & [List Fiat Accounts](#operation/ListFiatAccounts).", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "include_deleted", + "description": "Used to include deleted accounts in the response.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:read_fiat_account" + ] + } + ] + }, + "delete": { + "summary": "Delete Fiat Account", + "description": "Delete a Fiat Account.\nOnce a Fiat Account is deleted, transfers cannot be initiated to it.", + "operationId": "DeleteFiatAccount", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "example": { + "type": "application/json", + "value": "{}" + } + }, + "example": {} + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "id must be uuid, given 2d929a0d-e1e3-4781-b7f8-7b34e66f" + }, + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "id must be uuid, given '123456'" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "no fiat account found for id: 2d929a0d-e1e3-4781-b7f8-7b34e66f7832" + }, + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "no fiat account found for id: '2d929a0d-e1e3-4781-b7f8-7b34e66f7832'" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The Paxos fiat account ID (UUID).", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_fiat_account" + ] + } + ] + }, + "put": { + "summary": "Update Fiat Account", + "description": "Change an existing value or add a new value on one or more fields for the given Fiat Account and return the modified Fiat Account in `PENDING` status.\nUpdate fields in **either** `fiat_account_owner.person_details` or `fiat_account_owner.institution_details`.\nAttempts to convert the `fiat_account_owner` type results in an error.\nEmpty strings or null values are ignored.\n\nUpon successful response, Paxos initiates an automated review of the requested changes and then either sets the status to `APPROVED` or `REJECTED`.\nOccasionally, a manual review may be required.\nUse [Get Fiat Account](#operation/GetFiatAccount) to check for status changes.", + "operationId": "UpdateFiatAccount", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FiatAccount" + }, + "example": { + "id": "dde1b3c5-d02a-48f6-8d11-16b4f532ea49", + "ref_id": "test_ref_id_1", + "identity_id": "c6ea91da-8f33-4545-9bdf-3cf29b4041d7", + "account_id": "91f91384-30d4-46c2-9118-7f3cec676a2c", + "fiat_account_owner": { + "person_details": { + "first_name": "John", + "last_name": "Smith" + }, + "fiat_network_instructions": { + "wire": { + "account_number": "12345678", + "fiat_account_owner_address": { + "country": "USA", + "address1": "456 Main Street, NY", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + }, + "routing_details": { + "routing_number_type": "ABA", + "routing_number": "123456789", + "bank_name": "Customers Bank", + "bank_address": { + "country": "USA", + "address1": "123 Bank Street", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + } + } + }, + "status": "PENDING", + "metadata": { + "test_ref_id": "47aa7538-e2d2-47b3-8600-44a7965dd357", + "transaction_attempt": 1 + } + } + }, + "created_at": "2023-09-24T14:15:22Z", + "updated_at": "2023-09-24T14:15:22Z" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "fiat_account_owner cannot be changed from person to institution" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "identity_id forbidden for 1st-Party ledgering. See: https://docs.paxos.com/crypto-brokerage/ledger-type" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "fiat_account with id 2d929a0d-e1e3-4781-b7f8-7b34e66j783 not found" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The Paxos fiat account ID (UUID).\nThe Fiat Account ID (`id`) is provided in the response of the [Create Fiat Account](#operation/CreateFiatAccount).\nUse this ID to retrieve the instructions using [Get Fiat Account](#operation/GetFiatAccount) & [List Fiat Accounts](#operation/ListFiatAccounts).", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferPublicUpdateFiatAccountBody" + }, + "examples": { + "Update fiat account owner person details": { + "value": { + "fiat_account_owner": { + "person_details": { + "first_name": "John", + "last_name": "Smith" + } + } + } + }, + "Update fiat account owner institution details": { + "value": { + "fiat_account_owner": { + "institution_details": { + "name": "Big Tech Inc" + } + } + } + }, + "Update fiat account owner address": { + "value": { + "fiat_account_owner": { + "fiat_network_instructions": { + "wire": { + "fiat_account_owner_address": { + "country": "USA", + "address1": "456 Main Street, NY", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + } + } + } + } + } + }, + "Update routing bank name & address": { + "value": { + "fiat_account_owner": { + "fiat_network_instructions": { + "wire": { + "routing_details": { + "bank_name": "Customers Bank", + "bank_address": { + "country": "USA", + "address1": "123 Bank Street", + "address2": "", + "city": "New York", + "province": "NY", + "zip_code": "10101" + } + } + } + } + } + } + }, + "Update intermediary bank name & address": { + "value": { + "fiat_account_owner": { + "fiat_network_instructions": { + "wire": { + "intermediary_bank_name": "Intermediary Bank", + "intermediary_bank_address": { + "country": "USA", + "address1": "123 Bank Street", + "city": "New York", + "province": "NY", + "zip_code": "10101" + } + } + } + } + } + }, + "Update fiat account metadata": { + "value": { + "metadata": { + "key1": "value1", + "key2": "value2" + } + } + } + } + } + }, + "required": true + }, + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_fiat_account" + ] + } + ] + } + }, + "/transfer/fiat-deposit-instructions": { + "get": { + "summary": "List Fiat Deposit Instructions", + "description": "Return the associated Fiat Deposit Instructions matching the search criteria for the current Account.\nThe paginated results default to the maximum limit of 1,000 Fiat Deposit instructions, unless otherwise specified with the `limit` parameter.\nEvery paginated response contains a `next_page` field until the last page is reached.\nPass the `next_page` value into the `page_cursor` field of the next request to retrieve the next page of results.", + "operationId": "ListFiatDepositInstructions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListFiatDepositInstructionsResponse" + }, + "example": { + "items": [ + { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "profile_id": "5fc6d191-193c-4e28-94fa-656bbdbdfaad", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "ref_id": "idempotence_id", + "status": "VALID", + "memo_id": "9CFXQSCMSPLFHXLZ", + "fiat_network_instructions": { + "wire": { + "account_number": "12345678", + "fiat_account_owner_address": { + "country": "USA", + "address1": "456 Main Street, NY", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + }, + "routing_details": { + "routing_number_type": "ABA", + "routing_number": "123456789", + "bank_name": "Customers Bank", + "bank_address": { + "country": "USA", + "address1": "123 Bank Street", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + } + } + }, + "fiat_account_owner": { + "person_details": { + "first_name": "Jane", + "last_name": "Doe" + } + }, + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + } + } + } + ] + } + } + } + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "page_cursor token cannot be parsed" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "fiat deposit instructions with id f190b163-208f-4d73-8deb-4fb8b24add00 not found" + } + } + }, + "description": "Could not find Identity" + } + }, + "parameters": [ + { + "name": "ids", + "description": "Optionally filter by the UUIDs of the instructions. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "ref_ids", + "description": "Optionally filter by the client-specified IDs provided during instructions creation. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided. Maximum 1000.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Return items in ascending (ASC) or descending (DESC) order. Defaults to DESC.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "page_cursor", + "description": "Optional: Cursor for getting the next page of results.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:read_fiat_deposit_instructions" + ] + } + ] + }, + "post": { + "summary": "Create Fiat Deposit Instructions", + "description": "Create instructions for depositing fiat.", + "operationId": "CreateFiatDepositInstructions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FiatDepositInstructions" + }, + "example": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "profile_id": "5fc6d191-193c-4e28-94fa-656bbdbdfaad", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "ref_id": "idempotence_id", + "status": "VALID", + "memo_id": "9CFXQSCMSPLFHXLZ", + "fiat_network_instructions": { + "wire": { + "account_number": "12345678", + "fiat_account_owner_address": { + "country": "USA", + "address1": "456 Main Street, NY", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + }, + "routing_details": { + "routing_number_type": "ABA", + "routing_number": "123456789", + "bank_name": "Customers Bank", + "bank_address": { + "country": "USA", + "address1": "123 Bank Street", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + } + } + }, + "fiat_account_owner": { + "person_details": { + "first_name": "Jane", + "last_name": "Doe" + } + }, + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + } + } + } + } + } + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "identity not enabled for customer 8a398cb6-4e3b-4868-9cea-a1c567856e68 " + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "identity not found for customer 8a398cb6-4e3b-4868-9cea-a1c567856e68" + } + } + }, + "description": "Could not find Identity" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateFiatDepositInstructionsRequest" + }, + "examples": { + "Create fiat deposit instructions": { + "value": { + "profile_id": "5fc6d191-193c-4e28-94fa-656bbdbdfaad", + "fiat_network": "WIRE", + "identity_id": "8a398cb6-4e3b-4868-9cea-a1c567856e68", + "account_ id": "91f91384-30d4-46c2-9118-7f3cec676a2c", + "ref_id": "idempotence_id", + "routing_number_type": "SWIFT", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + } + } + } + } + } + }, + "required": true + }, + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_fiat_deposit_instructions" + ] + } + ] + } + }, + "/transfer/fiat-deposit-instructions/{id}": { + "get": { + "summary": "Get Fiat Deposit Instructions", + "description": "Get instructions for depositing fiat using a Paxos Fiat Deposit Instructions ID.\nThe Fiat Deposit Instructions ID (`id`) is provided in the response of the [Create Fiat Deposit Instructions](#operation/CreateFiatDepositInstructions).", + "operationId": "GetFiatDepositInstructions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FiatDepositInstructions" + }, + "example": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "profile_id": "5fc6d191-193c-4e28-94fa-656bbdbdfaad", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "ref_id": "idempotence_id", + "status": "VALID", + "memo_id": "9CFXQSCMSPLFHXLZ", + "fiat_network_instructions": { + "wire": { + "account_number": "12345678", + "fiat_account_owner_address": { + "country": "USA", + "address1": "456 Main Street, NY", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + }, + "routing_details": { + "routing_number_type": "ABA", + "routing_number": "123456789", + "bank_name": "Customers Bank", + "bank_address": { + "country": "USA", + "address1": "123 Bank Street", + "city": "New York", + "province": "NY", + "address2": "", + "zip_code": "10101" + } + } + }, + "fiat_account_owner": { + "person_details": { + "first_name": "Jane", + "last_name": "Doe" + } + }, + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + } + } + } + } + } + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "expected uuid, got invalid-uuid" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "fiat deposit instructions with id f190b163-208f-4d73-8deb-4fb8b24add00 not found" + } + } + }, + "description": "Could not find Identity" + } + }, + "parameters": [ + { + "name": "id", + "description": "Retrieve the Paxos Fiat Deposit Instructions for the given `id`.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:read_fiat_deposit_instructions" + ] + } + ] + } + }, + "/transfer/fiat-withdrawals": { + "post": { + "summary": "Create Fiat Withdrawal", + "description": "Withdraw fiat to the given destination.", + "operationId": "CreateFiatWithdrawal", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transfer" + }, + "example": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "profile_id": "5fc6d191-193c-4e28-94fa-656bbdbdfaad", + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264", + "amount": "10.00", + "total": "10.00", + "fee": "0.0000000", + "asset": "USD", + "balance_asset": "USD", + "direction": "DEBIT", + "type": "CUBIX_WITHDRAWAL", + "status": "PENDING", + "created_at": "2023-07-13T18:36:08.737Z", + "updated_at": "2023-07-13T18:36:08.737Z", + "fiat_account_id": "caa82b32-8abd-4899-afdc-f9d4bf9b4e98" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "fiat account has invalid status REJECTED, must be approved" + }, + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "fiat account has invalid status REJECTED, must be approved" + } + } + } + }, + "404": { + "description": "Could not find Profile", + "content": { + "application/json": { + "schema": { + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "fiat account not found with requested ID" + }, + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "fiat account not found with requested ID" + } + } + } + }, + "403": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient Funds": { + "summary": "Example of insufficient funds", + "description": "The needed funds include wire withdrawal fees. Please check developer documentation for fee details.", + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/insufficient-funds", + "title": "Insufficient Funds", + "status": 403, + "detail": "insufficient USD funds in profile 5fc6d191-193c-4e28-94fa-656bbdbdfaad: 100 needed, 50 available", + "meta": { + "profile_id": "5fc6d191-193c-4e28-94fa-656bbdbdfaad", + "asset": "USD", + "available": "50", + "needed": "100" + } + } + } + } + } + }, + "description": "Insufficient funds" + }, + "409": { + "description": "Transfer already exists", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Already Exists": { + "$ref": "#/components/examples/Problem_already_exists_fiat_withdrawal" + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateFiatWithdrawalRequest" + } + } + }, + "required": true + }, + "tags": [ + "Fiat Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_fiat_withdrawal" + ] + } + ] + } + }, + "/transfer/internal": { + "post": { + "summary": "Create Internal Transfer", + "description": "Transfer assets between two profiles belonging to the same customer.", + "operationId": "CreateInternalTransfer", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transfer" + }, + "examples": { + "Internal Transfer": { + "value": { + "amount": "10", + "asset": "BTC", + "auto_conversion": {}, + "balance_asset": "BTC", + "created_at": "2022-04-28T22:07:56.436854Z", + "customer_id": "66325f47-455d-4e0c-9d38-70c047b41dbe", + "direction": "DEBIT", + "fee": "0", + "id": "5ab7e995-5589-4b3f-a333-c14b42ac6eaf", + "metadata": { + "my_id": "TEST-v2-Profile-transfer-428169" + }, + "profile_id": "0acfa5a6-6f2e-41af-a833-48e301197ffd", + "ref_id": "TEST-v2-profile-transfer-ref_id-428169", + "status": "PENDING", + "total": "10", + "type": "INTERNAL_TRANSFER_DEBIT", + "group_id": "55e98066-d9ad-483b-9f10-d3aa252ebbe3" + } + }, + "Internal Transfer with 3rd-Party Integrations": { + "value": { + "account_id": "bffc91a9-a5ff-4648-80f1-0542ba18c218", + "amount": "10", + "asset": "BTC", + "auto_conversion": {}, + "balance_asset": "BTC", + "created_at": "2022-04-28T22:07:56.436854Z", + "customer_id": "66325f47-455d-4e0c-9d38-70c047b41dbe", + "direction": "DEBIT", + "fee": "0", + "id": "5ab7e995-5589-4b3f-a333-c14b42ac6eaf", + "identity_id": "1ad1e93c-6652-4b9b-99d5-9a13d20f32cc", + "metadata": { + "my_id": "TEST-v2-Profile-transfer-428169" + }, + "profile_id": "0acfa5a6-6f2e-41af-a833-48e301197ffd", + "ref_id": "TEST-v2-profile-transfer-ref_id-428169", + "status": "PENDING", + "total": "10", + "type": "INTERNAL_TRANSFER_DEBIT", + "group_id": "55e98066-d9ad-483b-9f10-d3aa252ebbe3" + } + } + } + } + } + }, + "403": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient Funds": { + "$ref": "#/components/examples/Problem_insufficient_funds" + } + } + } + }, + "description": "Insufficient funds" + }, + "404": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Profile Not Found": { + "$ref": "#/components/examples/Problem_not_found" + } + } + } + }, + "description": "Could not find profile" + }, + "409": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "https://api.paxos.com/v2/problems/already-exists", + "detail": "Transfer with ref_id already exists", + "status": 409, + "title": "Already exists" + } + } + }, + "description": "Transfer already exists" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInternalTransferRequest" + }, + "examples": { + "Internal Transfer": { + "value": { + "ref_id": "idempotence_id", + "from_profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "to_profile_id": "37867177-f88c-45cc-b9b5-d786e7079609", + "asset": "BTC", + "amount": "0.05", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + } + } + }, + "Internal Transfer with 3rd-Party Integrations": { + "value": { + "ref_id": "idempotence_id", + "from_profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "to_profile_id": "37867177-f88c-45cc-b9b5-d786e7079609", + "asset": "BTC", + "amount": "0.05", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + }, + "from_account_id": "bffc91a9-a5ff-4648-80f1-0542ba18c218", + "from_identity_id": "1ad1e93c-6652-4b9b-99d5-9a13d20f32cc", + "to_account_id": "8f9af45d-3c01-49ba-95c5-64e4f90ae7a3", + "to_identity_id": "79c7ae81-1a6c-406c-9e9f-97999cf96819" + } + } + } + } + }, + "required": true + }, + "tags": [ + "Internal Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_internal_transfer" + ] + } + ] + } + }, + "/transfer/limits/utilizations": { + "get": { + "summary": "List Transfer Limits", + "description": "List all limits that apply to the given transaction type.", + "operationId": "ListTransferLimits", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListTransferLimitsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "transfer_type", + "description": "Type of transfer to fetch limits for.", + "in": "query", + "required": true, + "schema": { + "type": "string", + "enum": [ + "INTERNAL_TRANSFER_DEBIT", + "INTERNAL_TRANSFER_CREDIT", + "CRYPTO_DEPOSIT", + "CRYPTO_WITHDRAWAL", + "WIRE_DEPOSIT", + "WIRE_WITHDRAWAL", + "SEN_DEPOSIT", + "SEN_WITHDRAWAL", + "BANK_DEPOSIT", + "BANK_WITHDRAWAL", + "PAXOS_TRANSFER_DEBIT", + "PAXOS_TRANSFER_CREDIT", + "SIGNET_DEPOSIT", + "SIGNET_WITHDRAWAL", + "CBIT_WITHDRAWAL", + "CBIT_DEPOSIT", + "CUBIX_DEPOSIT", + "CUBIX_WITHDRAWAL" + ] + } + } + ], + "tags": [ + "Limits" + ], + "security": [ + { + "OAuth2": [ + "transfer:read_transfer_limit" + ] + } + ] + } + }, + "/transfer/paxos": { + "post": { + "summary": "Create Paxos Transfer", + "description": "Transfer assets between two Profiles belonging to different [Entities](https://docs.paxos.com/dashboard/organization#entity).", + "operationId": "CreatePaxosTransfer", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transfer" + }, + "examples": { + "Paxos Transfer": { + "value": { + "amount": "0.05", + "asset": "BTC", + "auto_conversion": {}, + "balance_asset": "BTC", + "created_at": "2024-12-11T17:45:14.423911Z", + "customer_id": "be05ac89-d1dc-4be7-b64a-a003012e9359", + "direction": "DEBIT", + "fee": "0", + "group_id": "b7b6cde7-9053-47e7-bbc0-22d5fa4344ef", + "id": "fe6bc170-a5be-43ff-bf5b-63c8b6489597", + "profile_id": "e6b30762-0689-46fa-b208-35eb347e284c", + "ref_id": "92528c72-4962-4d14-ae4d-6b262df698b2", + "status": "COMPLETED", + "total": "0.05", + "type": "PAXOS_TRANSFER_DEBIT", + "updated_at": "2024-12-11T17:45:14.479258Z" + } + }, + "Paxos Transfer with 3rd-Party Integrations": { + "value": { + "account_id": "bffc91a9-a5ff-4648-80f1-0542ba18c218", + "amount": "0.05", + "asset": "BTC", + "auto_conversion": {}, + "balance_asset": "BTC", + "created_at": "2024-12-11T17:45:14.423911Z", + "customer_id": "be05ac89-d1dc-4be7-b64a-a003012e9359", + "direction": "DEBIT", + "fee": "0", + "group_id": "b7b6cde7-9053-47e7-bbc0-22d5fa4344ef", + "id": "fe6bc170-a5be-43ff-bf5b-63c8b6489597", + "identity_id": "1ad1e93c-6652-4b9b-99d5-9a13d20f32cc", + "profile_id": "e6b30762-0689-46fa-b208-35eb347e284c", + "ref_id": "92528c72-4962-4d14-ae4d-6b262df698b2", + "status": "COMPLETED", + "total": "0.05", + "type": "PAXOS_TRANSFER_DEBIT", + "updated_at": "2024-12-11T17:45:14.479258Z" + } + } + } + } + } + }, + "403": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient Funds": { + "$ref": "#/components/examples/Problem_insufficient_funds" + } + } + } + }, + "description": "Insufficient funds" + }, + "404": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Profile Not Found": { + "$ref": "#/components/examples/Problem_not_found" + } + } + } + }, + "description": "Could not find profile" + }, + "409": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "example": { + "type": "https://api.paxos.com/v2/problems/already-exists", + "detail": "Transfer with ref_id already exists", + "status": 409, + "title": "Already exists" + } + } + }, + "description": "Transfer already exists" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePaxosTransferRequest" + }, + "examples": { + "Paxos Transfer": { + "value": { + "ref_id": "idempotence_id", + "from_profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "to_profile_id": "37867177-f88c-45cc-b9b5-d786e7079609", + "asset": "BTC", + "amount": "0.05", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + } + } + }, + "Paxos Transfer with 3rd-Party Integrations": { + "value": { + "ref_id": "idempotence_id", + "from_profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "to_profile_id": "37867177-f88c-45cc-b9b5-d786e7079609", + "asset": "BTC", + "amount": "0.05", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + }, + "from_account_id": "bffc91a9-a5ff-4648-80f1-0542ba18c218", + "from_identity_id": "1ad1e93c-6652-4b9b-99d5-9a13d20f32cc", + "to_account_id": "8f9af45d-3c01-49ba-95c5-64e4f90ae7a3", + "to_identity_id": "79c7ae81-1a6c-406c-9e9f-97999cf96819" + } + } + } + } + }, + "required": true + }, + "tags": [ + "Paxos Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:write_paxos_transfer" + ] + } + ] + } + }, + "/transfer/transfers": { + "get": { + "summary": "List Transfers", + "description": "List all transfers, optionally filtering and paging the results.\n\nBy default, transfers are returned in reverse chronological (descending)\norder by creation time.\n\nThe recommended polling workflow is to query the results in ascending\norder (by setting `order_by` to `CREATED_AT`), keeping track of the\n`created_at` timestamp of the most recent transfer in the paged results.\nOnce transfers are discovered, the caller should store the returned `ID`\nand query GetTransfer to retrieve status updates.", + "operationId": "ListTransfers", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListTransfersResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "profile_ids", + "description": "Optionally filter by the target profiles of the transfers. Limit 100.\nCan be combined with created_at.* or updated_at.* filtering options only.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "identity_ids", + "description": "Optionally filter by the Identities associated with the transfers. Limit 100.\nCan be combined with created_at.* or updated_at.* filtering options only.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "ref_ids", + "description": "The client-specified IDs provided during transfer creation. Limit 100.\nCan be combined with created_at.* or updated_at.* filtering options only.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided. Maximum 1000.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Determines whether the items are returned in ascending (ASC), or descending (DESC) order.\nDefaults to ASC if `order_by` is UPDATED_AT. Otherwise defaults to DESC.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "order_by", + "description": "The specific method by which the returned results will be ordered.\nWhen specifying both `order_by` and a timestamp filter, `order_by` must equal the timestamp filter type.\nFor example:\n\n`updated_at.gte = 2022-07-01T03:02:01Z`, `order_by = UPDATED_AT`\n\nUsing `updated_at.gte = 2022-07-01T03:02:01Z`, `order_by = CREATED_AT` is an invalid pairing.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED_AT", + "UPDATED_AT" + ] + } + }, + { + "name": "page_cursor", + "description": "Optional: Cursor for getting the next page of results. When the number of items returned is fewer\nthan the limit, there is currently no next page.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "account_ids", + "description": "Optionally filter by the Accounts associated with the transfers. Limit 100.\nCan be combined with created_at.* or updated_at.* filtering options only.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "ids", + "description": "Optionally filter by the transfer ids. Limit 100.\nCan be combined with created_at.* or updated_at.* filtering options only.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "type", + "description": "Retrieve all (default) or the specified transfers.\nOptionally filter by transfer `type`.\nTo retrieve multiple transfer types, use query parameters: e.g., `type=CRYPTO_DEPOSIT&type=CRYPTO_WITHDRAWAL`.\nCan be combined with `created_at.*` or `updated_at.*` filtering options only.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "INTERNAL_TRANSFER_DEBIT", + "INTERNAL_TRANSFER_CREDIT", + "CRYPTO_DEPOSIT", + "CRYPTO_WITHDRAWAL", + "WIRE_DEPOSIT", + "WIRE_WITHDRAWAL", + "SEN_DEPOSIT", + "SEN_WITHDRAWAL", + "BANK_DEPOSIT", + "BANK_WITHDRAWAL", + "PAXOS_TRANSFER_DEBIT", + "PAXOS_TRANSFER_CREDIT", + "SIGNET_DEPOSIT", + "SIGNET_WITHDRAWAL", + "CBIT_WITHDRAWAL", + "CBIT_DEPOSIT", + "CUBIX_DEPOSIT", + "CUBIX_WITHDRAWAL" + ] + } + } + }, + { + "name": "group_ids", + "description": "Optionally filter by transfer `group_ids`. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "crypto_tx_hashes", + "description": "Optionally filter by the on-chain transaction hash for crypto transactions. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "secondary_statuses", + "description": "Optionally filter by secondary status.\n\n - TRAVEL_RULE_INFO_REQUESTED: Travel rule information is required to continue processing the transfer.\n - TRAVEL_RULE_REJECTED: Transfer has been terminally rejected due to failing travel rule checks.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "TRAVEL_RULE_INFO_REQUESTED", + "TRAVEL_RULE_REJECTED" + ] + } + } + }, + { + "name": "statuses", + "description": "Optionally filter by status.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ] + } + } + } + ], + "tags": [ + "Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:read_transfer" + ] + } + ] + } + }, + "/transfer/transfers/{id}": { + "get": { + "summary": "Get Transfer", + "description": "Get a single transfer by ID.\n\nIn the polling workflow, this endpoint can be called to monitor transfer\nstatus changes.", + "operationId": "GetTransfer", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transfer" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The Paxos transfer UUID.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Transfers" + ], + "security": [ + { + "OAuth2": [ + "transfer:read_transfer" + ] + } + ] + } + }, + "/tax/tax-form-revisions": { + "get": { + "summary": "List Tax Form Revisions", + "description": "Used for more granular file retrieval for specific accounts that require updated tax forms.\nLists all versions of a tax form for single account and tax year. Revisions will increment up as new tax forms are issued for the same account, tax year, and form type pairing. The highest value revision is the most recent.\nTax Form URL links will expire after 60 seconds.", + "operationId": "ListTaxFormRevisions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListTaxFormRevisionsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "account_id", + "description": "Required. Account ID", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tax_year", + "description": "Required. Tax Year", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "form_types", + "description": "Tax forms 1009 B or Misc", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "FORM_1099_B", + "FORM_1099_MISC" + ] + } + } + }, + { + "name": "revision", + "description": "Revision", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Tax Forms" + ], + "security": [ + { + "OAuth2": [ + "tax:read_tax_form" + ] + } + ] + } + }, + "/tax/tax-forms": { + "get": { + "summary": "List Tax Forms", + "description": "Used for bulk file transfer use cases.\nList tax forms for given account ids and tax year. The most recent revision number will be returned (revisions increment up; highest value revision for a specific account, tax year, and form type pairing is the most recent).\nTax Form URL links will expire after 60 seconds.\nPlease call ListTaxFormRevisions endpoint for all versions of a single accounts tax forms.", + "operationId": "ListTaxForms", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListTaxFormsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "account_ids", + "description": "Required. A list of Account IDs. Maximum 50.", + "in": "query", + "required": true, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "tax_year", + "description": "Required. Tax year", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "form_types", + "description": "Form types", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "FORM_1099_B", + "FORM_1099_MISC" + ] + } + } + } + ], + "tags": [ + "Tax Forms" + ], + "security": [ + { + "OAuth2": [ + "tax:read_tax_form" + ] + } + ] + } + }, + "/conversion/stablecoins": { + "get": { + "summary": "List Stablecoin Conversions", + "description": "List all conversions, optionally filtering and paging the results.\n\nBy default, conversions are returned in reverse chronological (descending)\norder by creation time. If no query parameters are supplied,\nthe response will include up to the last 100 conversions which\nwere created.\n\nThe paginated results default to display up to 100 conversions, unless\notherwise specified with the `limit` parameter. The maximum `limit` value is 1000.\nEvery paginated response contains a `next_page_cursor` field until the last page is reached.\n\nPass the `next_page_cursor` value into the `page_cursor` field of a new\nrequest to retrieve the next page of results.", + "operationId": "ListStablecoinConversions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListStablecoinConversionsResponse" + }, + "examples": { + "List Stablecoin Conversions": { + "value": { + "items": [ + { + "account_id": "00000000-0000-0000-0000-000000000000", + "amount": "100.01", + "created_at": "2023-09-16T02:01:15.941902Z", + "id": "38a2c6b4-167c-4c98-a190-406efc4121aa", + "identity_id": "00000000-0000-0000-0000-000000000000", + "metadata": { + "skey": "svalue" + }, + "profile_id": "b821ff88-fdb4-49ba-b30f-99c40f01fcfc", + "ref_id": "497266c5214043a29f9854096e9a9103", + "settled_at": "2023-09-16T02:01:16.613995Z", + "source_asset": "USD", + "status": "SETTLED", + "target_asset": "USDP", + "updated_at": "2023-09-16T02:01:16.018493Z" + }, + { + "account_id": "00000000-0000-0000-0000-000000000000", + "amount": "100.01", + "created_at": "2023-09-16T03:34:50.555200Z", + "id": "a490536f-3842-4823-8c84-056728243064", + "identity_id": "00000000-0000-0000-0000-000000000000", + "metadata": { + "skey": "svalue" + }, + "profile_id": "b821ff88-fdb4-49ba-b30f-99c40f01fcfc", + "ref_id": "4fecc881b73744e4a4e858017689da7d", + "settled_at": "2023-09-16T03:34:51.060002Z", + "source_asset": "USD", + "status": "SETTLED", + "target_asset": "USDP", + "updated_at": "2023-09-16T03:34:50.610541Z" + } + ] + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "detail": "insufficient scopes: found \"conversion:write_conversion_stablecoin\" required one of \"[conversion:read_conversion_stablecoin]\"", + "status": 403, + "title": "Forbidden", + "type": "about:blank" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "profile_id", + "description": "The [Profile](#tag/Profiles) associated with a conversion. Required in the\n[Create Stablecoin Conversion](#operation/CreateStablecoinConversion) request.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ref_id", + "description": "Client provided, unique Reference ID included the\n[Create Stablecoin Conversion](#operation/CreateStablecoinConversion) request.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "created_at.begin", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.end", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.begin", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "updated_at.end", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "order", + "description": "Return items in ascending (ASC) or descending (DESC) order by `created_at` timestamp.\n\nDefault order is descending (DESC).", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "page_cursor", + "description": "Cursor token for fetching the next page.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "description": "Number of results to return.\n\nDefault is 100 items. Maximum is 1000 items.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "tags": [ + "Stablecoin Conversion" + ], + "security": [ + { + "OAuth2": [ + "conversion:read_conversion_stablecoin" + ] + } + ] + }, + "post": { + "summary": "Create Stablecoin Conversion", + "description": "Create a Conversion request to exchange assets 1:1.\n\nA request to create a conversion can fail with one of the following\ntypes of errors:\n - [Insufficient Funds](https://developer.paxos.com/docs/v2/problems/insufficient-funds)\n if the Profile (`profile_id`) has insufficient available balance to\n fund the execution.\n - [Already Exists](https://developer.paxos.com/docs/v2/problems/already-exists)\n if a conversion with the same external ID (`ref_id`) has already been created.", + "operationId": "CreateStablecoinConversion", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StablecoinConversion" + }, + "examples": { + "Create Stablecoin Conversion": { + "value": { + "account_id'": "00000000-0000-0000-0000-000000000000", + "amount'": "3", + "created_at": "2023-10-19T15:37:18.929305155Z", + "id": "8dbce0e0-510f-4edc-9249-15f8c6214569", + "identity_id": "00000000-0000-0000-0000-000000000000", + "metadata": { + "skey": "svalue", + "custom_key": "custom_value" + }, + "profile_id": "b821ff88-fdb4-49ba-b30f-99c40f01fcfc", + "ref_id": "refid-24d25de7f5bd47ab978cbbd428b74199", + "source_asset": "USD", + "status": "CREATED", + "target_asset": "USDP", + "updated_at": "2023-10-19T15:37:18.990343Z" + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Conversion limit exceeded": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "11000 amount is above the maximum 10000 USD" + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'conversion:read_conversion_stablecoin', required one of '[conversion:write_conversion_stablecoin]'" + } + }, + "insufficient funds": { + "value": { + "detail": "insufficient USD funds in profile b821ff88-fdb4-49ba-b30f-99c40f01fcfc: 999 needed, 358.24 available", + "meta": { + "asset": "USD", + "available'": "358.24", + "needed": "999", + "profile_id": "b821ff88-fdb4-49ba-b30f-99c40f01fcfc" + }, + "status": 403, + "title": "Insufficient Funds", + "type": "https://developer.paxos.com/docs/v2/problems/insufficient-funds" + } + } + } + } + } + }, + "409": { + "description": "Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Already Exists": { + "value": { + "detail": "conversion already exists with ref_id 'refid-1'", + "meta": { + "existing": { + "account_id": "00000000-0000-0000-0000-000000000000", + "amount": "3", + "created_at": "2023-10-19T19:53:21.297848Z", + "id": "9e7a1f81-2cfa-4499-97dc-150d2a98bbd8", + "identity_id": "00000000-0000-0000-0000-000000000000", + "metadata": { + "skey": "svalue" + }, + "profile_id": "b821ff88-fdb4-49ba-b30f-99c40f01fcfc", + "ref_id": "refid-1", + "settled_at": "2023-10-19T19:53:21.987849Z", + "source_asset": "USD", + "status": "SETTLED", + "target_asset": "USDP", + "updated_at": "2023-10-19T19:53:21.334615Z" + } + }, + "status": 409, + "title": "Already Exists", + "type": "https://developer.paxos.com/docs/v2/problems/already-exists" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateStablecoinConversionRequest" + }, + "examples": { + "Create Stablecoin Conversion": { + "value": { + "amount'": "3", + "metadata": { + "skey": "svalue", + "custom_key": "custom_value" + }, + "profile_id": "b821ff88-fdb4-49ba-b30f-99c40f01fcfc", + "ref_id": "refid-24d25de7f5bd47ab978cbbd428b74199", + "source_asset": "USD", + "target_asset": "USDP" + } + } + } + } + }, + "required": true + }, + "tags": [ + "Stablecoin Conversion" + ], + "security": [ + { + "OAuth2": [ + "conversion:write_conversion_stablecoin" + ] + } + ] + } + }, + "/conversion/stablecoins/{id}": { + "get": { + "summary": "Get Stablecoin Conversion", + "description": "Retrieve a single conversion using the transaction `id` from the [Create Stablecoin Conversion](#operation/CreateStablecoinConversion) response.", + "operationId": "GetStablecoinConversion", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StablecoinConversion" + }, + "examples": { + "Get Stablecoin Conversion": { + "value": { + "account_id": "00000000-0000-0000-0000-000000000000", + "amount": "3", + "created_at'": "2023-10-19T15:37:18.929305Z", + "id": "8dbce0e0-510f-4edc-9249-15f8c6214569", + "identity_id": "00000000-0000-0000-0000-000000000000", + "metadata": { + "skey": "svalue", + "custom_key": "custom_value" + }, + "profile_id": "b821ff88-fdb4-49ba-b30f-99c40f01fcfc", + "ref_id": "refid-24d25de7f5bd47ab978cbbd428b74199", + "source_asset": "USD", + "status": "CREATED", + "target_asset": "USDP", + "updated_at": "2023-10-19T15:37:18.990343Z" + } + } + } + } + } + }, + "403": { + "description": "Insufficient scopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'conversion:write_conversion_stablecoin', required one of '[conversion:read_conversion_stablecoin]'" + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "value": { + "detail": "conversion with id 0def57e8-c6bb-40dc-b2b8-69bb80440cc1 not found for customer with id 4eaffe58-df0e-4559-8dec-fdae231684e1", + "status": 404, + "title": "Not Found", + "type": "about:blank" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "System provided UUID for the conversion is\nprovided in the [Create Stablecoin Conversion](#operation/CreateStablecoinConversion) response.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Stablecoin Conversion" + ], + "security": [ + { + "OAuth2": [ + "conversion:read_conversion_stablecoin" + ] + } + ] + }, + "delete": { + "summary": "Cancel Stablecoin Conversion", + "description": "Cancel a single conversion using the `id` from the\n[Create Stablecoin Conversion](#operation/CreateStablecoinConversion) response.", + "operationId": "CancelStablecoinConversion", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StablecoinConversion" + }, + "examples": { + "Cancel Stablecoin Conversion": { + "value": { + "id": "e5ca4d90-dff1-488a-ac04-04540f776ae1", + "profile_id": "c3680989-c04e-4000-9d96-8aca09eedee1", + "amount": "11.1", + "source_asset": "USD", + "target_asset": "USDP", + "status": "CANCELLED", + "identity_id": "d6aee44c-c169-405d-b14e-d78818577531", + "account_id": "47bb49d7-4e6c-43bf-9fd6-6ccd7d7f15d1", + "created_at": "2023-10-19T21:21:46.497863Z", + "updated_at": "2023-10-19T21:21:53.297594Z", + "cancelled_at": "2023-10-19T21:21:53.297594Z" + } + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "detail": "insufficient scopes: found \"conversion:read_conversion_stablecoin\" required one of \"[conversion:write_conversion_stablecoin]\"", + "status": 403, + "title": "Forbidden", + "type": "about:blank" + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "value": { + "detail": "conversion with id 0def57e8-c6bb-40dc-b2b8-69bb80440cc1 not found for customer with id 4eaffe58-df0e-4559-8dec-fdae231684e1", + "status": 404, + "title": "Not Found", + "type": "about:blank" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "System provided UUID for the conversion is\nprovided in the [Create Stablecoin Conversion](#operation/CreateStablecoinConversion) response.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Stablecoin Conversion" + ], + "security": [ + { + "OAuth2": [ + "conversion:write_conversion_stablecoin" + ] + } + ] + } + }, + "/settlement/transactions": { + "get": { + "summary": "List Transactions", + "description": "This endpoint enables you to fetch a list of Settlement Transactions that you have created (own the `source_profile_id`) or have been alleged against you (own the `target_profile_id`).\nYou can use query parameters to filter the results returned by `statuses`, `source_profile_id` and `target_profile_id`.\n\nNote that this endpoint supports pagination and returns a cursor token for fetching next pages.", + "operationId": "ListTransactions", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListTransactionsResponse" + }, + "example": [ + { + "id": "d99a03ee-6b88-4362-89da-087c2c8cd4a7", + "ref_id": "d840cf31-352f-4190-a476-7522bf3eafda", + "settlement_window_start": "2023-08-25T14:25:41.648486573Z", + "settlement_window_end": "2023-08-25T14:25:41.648486953Z", + "source_profile_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "target_profile_id": "47db6271-50d6-4934-8c81-c42d87bfb390", + "legs": [ + { + "id": "ace21517-447e-4764-8733-765cb12a7fab", + "direction": "DELIVER", + "asset": "BTC", + "amount": "100" + } + ], + "status": "PENDING", + "created_at": "2023-08-25T14:25:41.648489333Z", + "updated_at": "2023-08-25T14:25:41.648489493Z" + }, + { + "id": "738b465a-7bea-42cf-be8d-63572f5745e7", + "ref_id": "8f1dcf84-56e7-4e84-80aa-f01ef2eb1ab0", + "settlement_window_start": "2023-08-26T00:25:41.648486573Z", + "settlement_window_end": "2023-08-29T19:25:41.648486953Z", + "source_profile_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "target_profile_id": "47db6271-50d6-4934-8c81-c42d87bfb390", + "legs": [ + { + "id": "ace21517-447e-4764-8733-765cb12a7fab", + "direction": "RECEIVE", + "asset": "ETH", + "amount": "39.231" + } + ], + "status": "PENDING", + "created_at": "2023-08-24T18:29:41.648489333Z", + "updated_at": "2023-08-24T18:29:41.648489493Z" + } + ] + } + } + }, + "403": { + "description": "Insufficient scopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'settlement:write_transaction', required one of '[settlement:read_transaction]'" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "statuses", + "description": "Transaction statuses to filter on\n\n - PENDING: Initial state of a settlement transaction upon creation.\n - SETTLED: Indicates all obligations belong to the settlement transaction have been enacted.\n - EXPIRED: Indicates the settlement transaction is no longer eligible for settlement.\n - CANCELLED: Indicates the settlement transaction was cancelled by the source profile.\n - AFFIRMED: Indicates the settlement transaction will be eligible for settlement once within the window.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "PENDING", + "SETTLED", + "EXPIRED", + "CANCELLED", + "AFFIRMED" + ] + } + } + }, + { + "name": "source_profile_id", + "description": "The `profile_id` of the entity on the submitting side of the transaction.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "target_profile_id", + "description": "The `profile_id` of the entity on the receiving side of the transaction.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "page_cursor", + "description": "Cursor for getting the next page of results.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Settlement" + ], + "security": [ + { + "OAuth2": [ + "settlement:read_transaction" + ] + } + ] + }, + "post": { + "summary": "Create Transaction", + "description": "Creates a new bilateral Settlement Transaction with one or more legs. The customer must own the\n`source_profile_id` specified in the transaction.\n\nA successful response indicates the transaction has been accepted and will be in an initial `status` of `\"PENDING\"`\nfor settlement, the transaction is only eligible for settlement once the `status` is `\"AFFIRMED\"` by the\n`target_profile_id` and the current time is between the provided `settlement_window_start` and `settlement_window_end`.\n\nSettlement will only be enacted once both `source_profile_id` and `target_profile_id` have sufficient balances to\nfulfill all legs specified as settlement is **atomic**.", + "operationId": "CreateTransaction", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transaction" + }, + "example": { + "id": "d99a03ee-6b88-4362-89da-087c2c8cd4a7", + "ref_id": "d840cf31-352f-4190-a476-7522bf3eafda", + "settlement_window_start": "2023-08-25T14:25:41.648486573Z", + "settlement_window_end": "2023-08-25T14:25:41.648486953Z", + "source_profile_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "target_profile_id": "47db6271-50d6-4934-8c81-c42d87bfb390", + "legs": [ + { + "id": "ace21517-447e-4764-8733-765cb12a7fab", + "direction": "DELIVER", + "asset": "BTC", + "amount": "100" + } + ], + "status": "PENDING", + "created_at": "2023-08-25T14:25:41.648489333Z", + "updated_at": "2023-08-25T14:25:41.648489493Z" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400 + } + } + } + } + } + }, + "403": { + "description": "Insufficient scopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'settlement:read_transaction', required one of '[settlement:write_transaction]'" + } + } + } + } + } + }, + "409": { + "description": "Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Already Exists": { + "value": { + "status": 409, + "title": "Conflict", + "type": "about:blank" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTransactionRequest" + }, + "examples": { + "Create Transaction": { + "value": { + "ref_id": "d840cf31-352f-4190-a476-7522bf3eafda", + "settlement_window_start": "2023-08-25T14:25:41Z", + "settlement_window_end": "2023-08-25T16:25:41Z", + "source_profile_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "target_profile_id": "47db6271-50d6-4934-8c81-c42d87bfb390", + "legs": [ + { + "direction": "DELIVER", + "asset": "BTC", + "amount": "100" + } + ] + } + } + } + } + }, + "description": "Request to create a bilateral settlement transaction with one or more legs.", + "required": true + }, + "tags": [ + "Settlement" + ], + "security": [ + { + "OAuth2": [ + "settlement:write_transaction" + ] + } + ] + } + }, + "/settlement/transactions/{transaction_id}": { + "get": { + "summary": "Get Transaction", + "description": "Get a Settlement Transaction by its (transaction) id, you must have created the transaction (own the `source_profile_id`) or\nhave had the transaction alleged against you (own the `target_profile_id`).", + "operationId": "GetTransaction", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transaction" + }, + "example": [ + { + "id": "d99a03ee-6b88-4362-89da-087c2c8cd4a7", + "ref_id": "d840cf31-352f-4190-a476-7522bf3eafda", + "settlement_window_start": "2023-08-25T14:25:41.648486573Z", + "settlement_window_end": "2023-08-25T14:25:41.648486953Z", + "source_profile_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "target_profile_id": "47db6271-50d6-4934-8c81-c42d87bfb390", + "legs": [ + { + "id": "ace21517-447e-4764-8733-765cb12a7fab", + "direction": "DELIVER", + "asset": "BTC", + "amount": "100" + } + ], + "status": "PENDING", + "created_at": "2023-08-25T14:25:41.648489333Z", + "updated_at": "2023-08-25T17:53:23.648489493Z" + } + ] + } + } + }, + "403": { + "description": "Insufficient scopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'settlement:write_transaction', required one of '[settlement:read_transaction]'" + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "value": { + "status": 404, + "title": "Not Found", + "type": "about:blank" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "transaction_id", + "description": "The unique `id` in the `Transaction` object.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Settlement" + ], + "security": [ + { + "OAuth2": [ + "settlement:read_transaction" + ] + } + ] + }, + "delete": { + "summary": "Cancel Transaction", + "description": "Cancels the Settlement Transaction, this action can only be done by the customer owning the source profile (`source_profile_id`).\nThe transaction must be in a `\"PENDING\"` status for this to take effect, you cannot cancel a transaction which\nis `\"AFFIRMED\"`.", + "operationId": "CancelTransaction", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transaction" + }, + "example": { + "id": "d99a03ee-6b88-4362-89da-087c2c8cd4a7", + "ref_id": "d840cf31-352f-4190-a476-7522bf3eafda", + "settlement_window_start": "2023-08-25T14:25:41.648486573Z", + "settlement_window_end": "2023-08-25T14:25:41.648486953Z", + "source_profile_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "target_profile_id": "47db6271-50d6-4934-8c81-c42d87bfb390", + "legs": [ + { + "id": "ace21517-447e-4764-8733-765cb12a7fab", + "direction": "DELIVER", + "asset": "BTC", + "amount": "100" + } + ], + "status": "CANCELLED", + "created_at": "2023-08-25T14:25:41.648489333Z", + "updated_at": "2023-08-25T17:53:23.648489493Z" + } + } + } + }, + "403": { + "description": "Insufficient scopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'settlement:read_transaction', required one of '[settlement:write_transaction]'" + } + }, + "Forbidden": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403 + } + } + } + } + } + }, + "409": { + "description": "Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "value": { + "status": 409, + "title": "Conflict", + "type": "about:blank" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "transaction_id", + "description": "The unique `id` in the `Transaction` object.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Settlement" + ], + "security": [ + { + "OAuth2": [ + "settlement:write_transaction" + ] + } + ] + } + }, + "/settlement/transactions/{transaction_id}/affirm": { + "put": { + "summary": "Affirm Transaction", + "description": "Affirms the Settlement Transaction for settlement, the transaction is now eligible for settlement once the current time is\nbetween the provided `settlement_window_start` and `settlement_window_end`. This action can only be done by the\ncustomer owning the target profile (`target_profile_id`).\nThe transaction must be in a `\"PENDING\"` status for this to take effect.", + "operationId": "AffirmTransaction", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transaction" + }, + "example": { + "id": "d99a03ee-6b88-4362-89da-087c2c8cd4a7", + "ref_id": "d840cf31-352f-4190-a476-7522bf3eafda", + "settlement_window_start": "2023-08-25T14:25:41.648486573Z", + "settlement_window_end": "2023-08-25T14:25:41.648486953Z", + "source_profile_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "target_profile_id": "47db6271-50d6-4934-8c81-c42d87bfb390", + "legs": [ + { + "id": "ace21517-447e-4764-8733-765cb12a7fab", + "direction": "DELIVER", + "asset": "BTC", + "amount": "100" + } + ], + "status": "AFFIRMED", + "created_at": "2023-08-25T14:25:41.648489333Z", + "updated_at": "2023-08-25T17:53:23.648489493Z" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400 + } + } + } + } + } + }, + "403": { + "description": "Insufficient scopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'settlement:write_transaction', required one of '[settlement:read_transaction]'" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "transaction_id", + "description": "The unique `id` in the `Transaction` object.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Settlement" + ], + "security": [ + { + "OAuth2": [ + "settlement:write_transaction" + ] + } + ] + } + }, + "/rewards/monitor/address": { + "get": { + "summary": "List Monitoring Address", + "description": "Retrieve a list of monitoring address\n\nFilter by address, network or both to retrieve a single record", + "operationId": "ListMonitoringAddress", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListMonitoringAddressResponse" + }, + "examples": { + "List monitoring addresses": { + "value": { + "addresses": [ + { + "address": "0xD6E012522DB5075694ac9907BABBDB4825A1c822", + "id": "6477f17d-7c17-43a5-84cc-a6a104a89d81", + "crypto_network": "ETHEREUM", + "name": "Address 1", + "created_at": "2025-03-21T14:45:22.682768Z" + }, + { + "address": "0xD6E012522DB5075694ac9907BABBDB4825A1c822", + "id": "6477f17d-7c17-43a5-84cc-a6a104a89d81", + "crypto_network": "ETHEREUM", + "created_at": "2025-02-20T14:45:22.682768Z" + }, + { + "address": "14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ6", + "id": "6477f17d-7c17-43a5-84cc-a6a104a89d81", + "crypto_network": "SOLANA", + "created_at": "2025-01-10T14:45:22.682768Z" + } + ], + "next_page_cursor": "CgwI-Pr1vgYQyLLpswESJDM2NGU2MTgyLTRhZjctNDg4NC1iY2MxLTM0MThmNTA0MWYzYg" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "address", + "description": "On-chain address Paxos will monitor for eligible reward activity. Must be valid for the specified network.\nNote: We only accept wallet addresses for Solana. Derived addresses (i.e. ATA’s) are not yet supported", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "crypto_network", + "description": "Network the address belongs to. Supported: `ETHEREUM`, `SOLANA`, `INK`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "BITCOIN", + "ETHEREUM", + "BITCOIN_CASH", + "LITECOIN", + "SOLANA", + "POLYGON_POS", + "BASE", + "ARBITRUM_ONE", + "INK" + ] + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided. Maximum 1000.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Results are ordered by created_at. Specify the ordering of the results.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "page_cursor", + "description": "Cursor for pagination", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Monitoring Addresses" + ], + "security": [ + { + "OAuth2": [ + "rewards:read_monitoring_address" + ] + } + ] + }, + "post": { + "summary": "Create Monitoring Address", + "description": "Adds an address to be monitored for rewards distribution\n\nCurrently supporting only `ETHEREUM`, `SOLANA` & `INK` addresses are supported", + "operationId": "CreateMonitoringAddress", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMonitoringAddressResponse" + }, + "examples": { + "Setting up a new address to monitor": { + "value": { + "address": { + "address": "0x2D2849217C027494ae0D7Af2fC7f9b798Ddd5aB9", + "crypto_network": "ETHEREUM", + "name": "New Address", + "created_at": "2025-03-21T15:22:05.474383Z" + } + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Trying to set up an invalid address": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "invalid address" + } + }, + "Not setting the address": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "address must be set" + } + }, + "Not setting the network": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "network must be set" + } + }, + "Using an unsupported network": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "invalid crypto_network" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMonitoringAddressRequest" + }, + "examples": { + "Add a new monitoring address with a name": { + "value": { + "crypto_network": "ETHEREUM", + "address": "0x2D2849217C027494ae0D7Af2fC7f9b798Ddd5aB9", + "name": "New Address" + } + }, + "Add a new monitoring address with no name": { + "value": { + "id": "6477f17d-7c17-43a5-84cc-a6a104a89d81", + "crypto_network": "ETHEREUM", + "address": "0x2D2849217C027494ae0D7Af2fC7f9b798Ddd5aB9" + } + } + } + } + }, + "required": true + }, + "tags": [ + "Monitoring Addresses" + ], + "security": [ + { + "OAuth2": [ + "rewards:write_monitoring_address" + ] + } + ] + } + }, + "/rewards/monitor/address/{id}": { + "get": { + "summary": "Get Monitoring Address", + "description": "Retrieves a monitoring address by id", + "operationId": "GetMonitoringAddress", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMonitoringAddressResponse" + }, + "examples": { + "List monitoring addresses": { + "value": { + "address": "0xD6E012522DB5075694ac9907BABBDB4825A1c822", + "id": "6477f17d-7c17-43a5-84cc-a6a104a89d81", + "crypto_network": "ETHEREUM", + "name": "Address 1", + "created_at": "2025-03-21T14:45:22.682768Z" + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Using an unsupported network": { + "value": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "address not found" + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Using an unsupported network": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "invalid address id" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "UUID for internal reference.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Monitoring Addresses" + ], + "security": [ + { + "OAuth2": [ + "rewards:read_monitoring_address" + ] + } + ] + }, + "put": { + "summary": "Update Monitoring Address", + "description": "Updates a monitored address name", + "operationId": "UpdateMonitoringAddress", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMonitoringAddressResponse" + }, + "examples": { + "Update address name": { + "value": { + "address": { + "id": "6477f17d-7c17-43a5-84cc-a6a104a89d81", + "address": "0x2D2849217C027494ae0D7Af2fC7f9b798Ddd5aB9", + "crypto_network": "ETHEREUM", + "name": "Address name", + "created_at": "2025-03-21T15:22:05.474383Z" + } + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Using an unsupported network": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "name must be set" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "UUID for internal reference.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoRewardsPublicUpdateMonitoringAddressBody" + }, + "examples": { + "Update address name": { + "value": { + "name": "Address name" + } + } + } + } + }, + "required": true + }, + "tags": [ + "Monitoring Addresses" + ], + "security": [ + { + "OAuth2": [ + "rewards:write_monitoring_address" + ] + } + ] + } + }, + "/statements": { + "get": { + "summary": "List Statements", + "description": "List statements based on the provided filters", + "operationId": "ListStatements", + "responses": { + "200": { + "description": "Successfully retrieve statements", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListStatementsResponse" + }, + "examples": { + "Retrieve statements": { + "value": { + "statements": [ + { + "id": "704b4e48-bbb1-4086-b6e4-6e9b2e3e5d7a", + "ref_id": "USDG_REWARDS-cdcbff8e-cf51-4536-ba6f-92ef6846e48a-2025-02", + "customer_id": "cdcbff8e-cf51-4536-ba6f-92ef6846e48a", + "type": "STATEMENT_TYPE_USDG_REWARD", + "product": "USDG_REWARDS", + "status": "STATEMENT_STATUS_PAID", + "metadata": { + "total_amount": "100.5" + }, + "statement_balances": [ + { + "asset": "USDG", + "amount_paid": "100.5", + "total_amount_owed": "100.5" + } + ], + "period_start": "2025-02-01T00:00:00Z", + "period_end": "2025-02-28T23:59:59.999999Z", + "generated_at": "2025-03-18T23:11:47.840321Z", + "paid_at": "2025-03-19T19:21:57.172302Z", + "created_at": "2025-03-18T23:11:47.627302Z" + }, + { + "id": "30ed2047-6155-4b75-b235-6600aa7f65dd", + "ref_id": "USDG_REWARDS-cdcbff8e-cf51-4536-ba6f-92ef6846e48a-2025-03", + "customer_id": "cdcbff8e-cf51-4536-ba6f-92ef6846e48a", + "type": "STATEMENT_TYPE_USDG_REWARD", + "product": "USDG_REWARDS", + "status": "STATEMENT_STATUS_PAID", + "metadata": { + "total_amount": "100.5" + }, + "statement_balances": [ + { + "asset": "USDG", + "amount_paid": "100.5", + "total_amount_owed": "100.5" + } + ], + "period_start": "2025-02-18T00:00:00Z", + "period_end": "2025-03-18T00:00:00Z", + "generated_at": "2025-03-18T19:11:54.606991Z", + "paid_at": "2025-03-20T14:26:06.649645Z", + "created_at": "2025-03-18T19:11:54.372336Z" + } + ] + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "customer_id", + "description": "customer_id is a required field.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ref_ids", + "description": "Optionally filter by the ref_ids of the statements.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "statement_ids", + "description": "Optionally filter by the ids of the statements.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "statuses", + "description": "Optionally filter by the statuses of the statements to be returned. Defaults to all statuses.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "STATEMENT_STATUS_UNSPECIFIED", + "STATEMENT_STATUS_INITIATED", + "STATEMENT_STATUS_GENERATED", + "STATEMENT_STATUS_PAID" + ] + } + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Sort order for the results by period start, defaults to DESC if not provided.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "page_cursor", + "description": "Cursor for getting the next page of results.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Statements" + ], + "security": [ + { + "OAuth2": [ + "statements:read_statement" + ] + } + ] + } + }, + "/statements/payments": { + "get": { + "summary": "List Payments", + "description": "List payments based on the provided filters", + "operationId": "ListPayments", + "responses": { + "200": { + "description": "Successfully retrieve payments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListPaymentsResponse" + }, + "examples": { + "Retrieve payments": { + "value": { + "payments": [ + { + "id": "08ae7260-0967-44e4-b2e3-e9c837a3de69", + "customer_id": "cdcbff8e-cf51-4536-ba6f-92ef6846e48a", + "profile_id": "00000000-0000-0000-0000-000000000000", + "account_id": "00000000-0000-0000-0000-000000000000", + "ref_id": "cdcbff8e-cf51-4536-ba6f-92ef6846e48a-USDG_REWARDS-cdcbff8e-cf51-4536-ba6f-92ef6846e48a-2025-02-USDG-100.5-seq#1", + "product": "USDG_REWARDS", + "payment_type": "PAYMENT_TYPE_CRYPTO_WITHDRAWAL", + "payment_destination": "f45b7f18-a10d-4e19-bea2-9aa91cab6b69", + "payment_asset": "USDG", + "payment_amount": "100.5", + "payment_status": "PAYMENT_STATUS_COMPLETED", + "created_at": "2025-03-19T14:00:45.589886Z", + "processed_at": "2025-03-19T19:21:57.172302Z" + }, + { + "id": "b05683f7-28ac-43fa-8ed8-b332cf28051e", + "customer_id": "cdcbff8e-cf51-4536-ba6f-92ef6846e48a", + "profile_id": "00000000-0000-0000-0000-000000000000", + "account_id": "00000000-0000-0000-0000-000000000000", + "ref_id": "cdcbff8e-cf51-4536-ba6f-92ef6846e48a-USDG_REWARDS-cdcbff8e-cf51-4536-ba6f-92ef6846e48a-2025-03-USDG-100.5-seq#1", + "product": "USDG_REWARDS", + "payment_type": "PAYMENT_TYPE_CRYPTO_WITHDRAWAL", + "payment_destination": "f45b7f18-a10d-4e19-bea2-9aa91cab6b69", + "payment_asset": "USDG", + "payment_amount": "100.5", + "payment_status": "PAYMENT_STATUS_COMPLETED", + "created_at": "2025-03-18T19:26:54.298637Z", + "processed_at": "2025-03-20T14:26:06.649645Z" + } + ], + "next_page_cursor": "CgwI-Pr1vgYQyLLpswESJDM2NGU2MTgyLTRhZjctNDg4NC1iY2MxLTM0MThmNTA0MWYzYg" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "ref_ids", + "description": "No other parameters are allowed if ref_ids are provided", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "payment_ids", + "description": "No other parameters are allowed if payment_ids are provided", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "customer_id", + "description": "Use together with product to list for a specific customer and product", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "product", + "description": "Use together with product to list for a specific customer and product", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "USDG_REWARDS" + ] + } + }, + { + "name": "payment_status", + "description": "Optional, filter by payment status", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "PAYMENT_STATUS_PENDING", + "PAYMENT_STATUS_COMPLETED", + "PAYMENT_STATUS_FAILED" + ] + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "order", + "description": "Sort order for the results by created at, defaults to DESC if not provided.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "page_cursor", + "description": "Cursor for getting the next page of results.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Payments" + ], + "security": [ + { + "OAuth2": [ + "statements:read_payment" + ] + } + ] + } + }, + "/events": { + "get": { + "summary": "List Events", + "description": "This endpoint enables you to fetch a list of events that have been created by the system.\nYou can use query parameters to filter the results by the `created_at` time using `created_at.lt`, `created_at.gt`, etc. and you can\n`limit` the number of events returned.\n\nUsing `created_at` and `limit` together will allow you to paginate through all events owned by you.\nEvents returned will always be order in `created_at` ascending order.", + "operationId": "ListEvents", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEventsResponse" + }, + "example": { + "events": [ + { + "id": "d99a03ee-6b88-4362-89da-087c2c8cd4a7", + "type": "identity.approved", + "object_type": "identity_summary_status_change", + "object": { + "id": "d840cf31-352f-4190-a476-7522bf3eafda", + "identity_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "new_summary_status": "APPROVED", + "old_summary_status": "PENDING" + }, + "created_at": "2023-08-25T14:25:41.648489333Z", + "undelivered_webhooks": 0 + }, + { + "id": "19c0ae8e-fdfc-4b27-88af-07762af8f2a8", + "type": "identity.documents_required", + "object_type": "identity_required_documents", + "object": { + "id": "d11aba88-39cd-4445-acbb-e4d127588def", + "identity_id": "fc9dcae4-5411-464c-a20e-f0911ee1c5c1", + "required_documents": [ + "TAX_IDENTIFICATION", + "PROOF_OF_RESIDENCY", + "PROOF_OF_FUNDS" + ] + }, + "created_at": "2023-08-24T18:29:41.648489493Z", + "undelivered_webhooks": 0 + } + ] + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Bad limit": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "limit must be between 1 and 100" + } + } + } + } + } + }, + "403": { + "description": "Insufficient scopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'identity:read_identity', required one of '[event:read_event]'" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "created_at.lt", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.lte", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.eq", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gte", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "created_at.gt", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "description": "Number of results to return. Defaults to 100 if no limit is provided.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "type", + "description": "Retrieve all (default) or optionally filter by event type.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Events" + ], + "security": [ + { + "OAuth2": [ + "events:read_event" + ] + } + ] + } + }, + "/events/{id}": { + "get": { + "summary": "Get Event", + "description": "Get an Event by its (event) id, the event must have been created by the system and you must be the owner of the\nthe event, you can get an event id by either listing events or via a webhook integration.", + "operationId": "GetEvent", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Event" + }, + "example": { + "id": "d99a03ee-6b88-4362-89da-087c2c8cd4a7", + "type": "identity.approved", + "object_type": "identity_summary_status_change", + "object": { + "id": "d840cf31-352f-4190-a476-7522bf3eafda", + "identity_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "new_summary_status": "APPROVED", + "old_summary_status": "PENDING" + }, + "created_at": "2023-08-25T14:25:41.648489333Z", + "undelivered_webhooks": 0 + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Bad event id": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "error parsing event id" + } + } + } + } + } + }, + "403": { + "description": "Insufficient scopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Insufficient scopes": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "insufficient scopes: found 'identity:read_identity', required one of '[event:read_event]'" + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Not Found": { + "value": { + "status": 404, + "title": "Not Found", + "type": "about:blank" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "The unique `id` in the `Event` object.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Events" + ], + "security": [ + { + "OAuth2": [ + "events:read_event" + ] + } + ] + } + }, + "/api-creds/credentials": { + "get": { + "summary": "List API Credentials", + "description": "List all API credentials that have been created.", + "operationId": "ListApiCredentials", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListApiCredentialsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "order", + "description": "Determines whether the items are returned in ascending (ASC), or descending (DESC) order. Defaults to DESC.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + } + }, + { + "name": "order_by", + "description": "The specific field by which the returned results will be ordered. Defaults to CREATED_AT.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + } + }, + { + "name": "limit", + "description": "The maximum number of items to return. Defaults to 0 (return all records). Max value is 1000.", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "page_cursor", + "description": "The page cursor for pagination. Use the next_page_cursor from the response to get the next page.", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "statuses", + "description": "Filter for credentials with a set of statuses. Defaults to [APPROVED].", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "APPROVED", + "DISABLED" + ] + } + } + }, + { + "name": "ids", + "description": "Optionally filter by the UUIDs of the credentials. Limit 100.", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "tags": [ + "API Credentials" + ], + "security": [ + { + "OAuth2": [ + "api_creds:read_credentials" + ] + } + ] + } + }, + "/api-creds/credentials/{client_id}": { + "delete": { + "summary": "Delete API Credentials", + "description": "Delete the given API Credentials, preventing them from being used for authentication.", + "operationId": "DeleteApiCredentials", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteApiCredentialsResponse" + } + } + } + } + }, + "parameters": [ + { + "name": "client_id", + "description": "The client_id of the credentials to delete.", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "API Credentials" + ], + "security": [ + { + "OAuth2": [ + "api_creds:delete_credentials" + ] + } + ] + } + } + }, + "components": { + "schemas": { + "ListProfilesRequestOrderBy": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + }, + "ProfilePublicUpdateProfileBody": { + "type": "object", + "example": { + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "nickname": "MyProfileName" + }, + "properties": { + "nickname": { + "type": "string" + } + }, + "required": [ + "nickname" + ] + }, + "CreateProfileRequest": { + "type": "object", + "properties": { + "nickname": { + "type": "string", + "description": "The display name of the profile. Must be unique." + }, + "description": { + "type": "string", + "description": "The description of the created profile." + } + }, + "required": [ + "nickname" + ] + }, + "DeactivateProfileResponse": { + "type": "object" + }, + "ListProfileBalancesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileBalance" + } + } + }, + "required": [ + "balances" + ] + }, + "ListProfilesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Profile" + } + }, + "next_page_cursor": { + "type": "string", + "description": "Cursor token required for fetching the next page." + } + } + }, + "Profile": { + "type": "object", + "example": { + "id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "nickname": "MyProfileName", + "type": "NORMAL" + }, + "properties": { + "id": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ProfileType" + }, + "description": { + "type": "string" + }, + "account_id": { + "type": "string", + "title": "@hidden" + } + }, + "required": [ + "id", + "nickname", + "type" + ] + }, + "ProfileBalance": { + "type": "object", + "example": { + "asset": "BTC", + "available": "1.23103715", + "trading": ".25" + }, + "properties": { + "asset": { + "type": "string", + "description": "The asset held by the profile." + }, + "available": { + "type": "string", + "description": "The available asset balance for new debit requests." + }, + "trading": { + "type": "string", + "description": "The asset amount committed to pending orders." + } + }, + "description": "A ProfileBalance represents the holdings of a particular asset within a profile.", + "required": [ + "asset", + "available", + "trading" + ] + }, + "ProfileType": { + "type": "string", + "enum": [ + "NORMAL", + "DEFAULT" + ], + "description": "The profile type.\n\n - NORMAL: A client-created profile. All Profiles created using the `CreateProfile` endpoint are of this type.\n - DEFAULT: A system-generated profile." + }, + "SortOrder": { + "type": "string", + "enum": [ + "DESC", + "ASC" + ] + }, + "TimestampFilter": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "format": "date-time", + "description": "Include timestamps strictly less than lt. RFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "lte": { + "type": "string", + "format": "date-time", + "description": "Include timestamps less than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "eq": { + "type": "string", + "format": "date-time", + "description": "Include timestamps exactly equal to eq. RFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "gte": { + "type": "string", + "format": "date-time", + "description": "Include timestamps greater than or equal to lte. RFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "gt": { + "type": "string", + "format": "date-time", + "description": "Include timestamps strictly greater than gt. RFC3339 format, like `2006-01-02T15:04:05Z`." + } + } + }, + "FundingSandboxCreateSandboxDepositBody": { + "type": "object", + "properties": { + "asset": { + "type": "string", + "description": "The kind of asset to deposit." + }, + "amount": { + "type": "string", + "description": "The amount to deposit.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "crypto_address": { + "type": "string", + "title": "The crypto address on which to deposit the asset. If not set, then a random address is used" + } + }, + "title": "CreateSandboxDepositRequest", + "required": [ + "asset", + "amount" + ] + }, + "CreateSandboxDepositResponse": { + "type": "object", + "properties": { + "activity_id": { + "type": "string", + "description": "The UUID of the customer activity created for the deposit." + } + } + }, + "CryptoNetwork": { + "type": "string", + "enum": [ + "BITCOIN", + "ETHEREUM", + "BITCOIN_CASH", + "LITECOIN", + "SOLANA", + "POLYGON_POS", + "BASE", + "ARBITRUM_ONE", + "INK" + ], + "description": "A CryptoNetwork is a blockchain transmitting cryptocurrencies." + }, + "CustomerDueDiligenceNetWorthRange": { + "type": "string", + "enum": [ + "NET_WORTH_0_TO_100K", + "NET_WORTH_100K_TO_500K", + "NET_WORTH_500K_TO_1M", + "NET_WORTH_1M_TO_2_5M", + "NET_WORTH_2_5M_TO_5M", + "NET_WORTH_5M_TO_7_5M", + "NET_WORTH_7_5M_TO_10M", + "NET_WORTH_10M_TO_25M", + "NET_WORTH_25M_TO_50M", + "NET_WORTH_OVER_50M" + ] + }, + "CustomerDueDiligenceTransferValueRange": { + "type": "string", + "enum": [ + "TRANSFER_VALUE_0_TO_25K", + "TRANSFER_VALUE_25K_TO_50K", + "TRANSFER_VALUE_50K_TO_100K", + "TRANSFER_VALUE_100K_TO_250K", + "TRANSFER_VALUE_250K_TO_500K", + "TRANSFER_VALUE_500K_TO_750K", + "TRANSFER_VALUE_750K_TO_1M", + "TRANSFER_VALUE_1M_TO_2_5M", + "TRANSFER_VALUE_2_5M_TO_5M", + "TRANSFER_VALUE_ABOVE_5M" + ] + }, + "CustomerDueDiligenceYearlyIncomeRange": { + "type": "string", + "enum": [ + "INCOME_0_TO_50K", + "INCOME_50K_TO_100K", + "INCOME_100K_TO_250K", + "INCOME_250K_TO_500K", + "INCOME_500K_TO_750K", + "INCOME_750K_TO_1M", + "INCOME_ABOVE_1M" + ] + }, + "IdentityPublicDocumentUploadBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The file name." + }, + "document_types": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentType" + }, + "description": "A list of document types contained within the uploaded file." + } + }, + "title": "DocumentUploadRequest", + "required": [ + "name" + ] + }, + "IdentityPublicUpdateIdentityBody": { + "type": "object", + "example": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "person_details": { + "first_name": "John" + } + }, + "properties": { + "person_details": { + "$ref": "#/components/schemas/PersonDetails" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "API User-facing metadata" + }, + "set_user_disabled": { + "type": "boolean", + "description": "`true` disables the identity. `false` re-enables it, unless it has been disabled by a Paxos admin." + }, + "institution_details": { + "$ref": "#/components/schemas/InstitutionDetails" + }, + "ref_id": { + "type": "string", + "description": "A user-facing ID to prevent duplicate identity creation. Unique for all identities created by the same API user." + }, + "tax_details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaxDetail" + }, + "title": "list of tax details associated with the identity" + }, + "set_tax_details_not_required": { + "type": "boolean", + "description": "Set to true if tax details are not legally required." + }, + "customer_due_diligence": { + "$ref": "#/components/schemas/CustomerDueDiligence" + }, + "is_merchant": { + "type": "boolean", + "description": "Set to true to indicate that this identity is a merchant." + }, + "last_kyc_refresh_date": { + "type": "string", + "format": "date-time", + "description": "Set to the timestamp the identity has last undergone a periodic kyc refresh. If unset, the update is not for\nperiodic kyc refresh. RFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`. ex: `2006-01-02T15:04:05Z`." + } + }, + "title": "UpdateIdentityRequest" + }, + "ListIdentitiesRequestOrderBy": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + }, + "MerchantFundingSourceFundingSource": { + "type": "string", + "enum": [ + "BUSINESS_LOANS_FINANCING", + "SALARY_SAVINGS", + "INVESTMENT_GAINS", + "INHERITANCE", + "REAL_ESTATE_INCOME", + "NON_PROFIT_SOURCES", + "OTHER_BUSINESS_INCOME" + ] + }, + "PassthroughVerificationField": { + "type": "string", + "enum": [ + "FULL_LEGAL_NAME", + "ADDRESS", + "DATE_OF_BIRTH", + "CIP_ID" + ] + }, + "PersonDetailsCIPIDType": { + "type": "string", + "enum": [ + "SSN", + "ID_CARD", + "ITIN", + "PASSPORT", + "DRIVING_LICENSE", + "VISA" + ], + "title": "" + }, + "identityprotoVerifierType": { + "type": "string", + "enum": [ + "PAXOS", + "PASSTHROUGH", + "MANUAL" + ] + }, + "AccountPurpose": { + "type": "string", + "enum": [ + "INVESTMENT_TRADING", + "SAVINGS", + "STABLECOIN_PURCHASE_REDEMPTION" + ] + }, + "CreateIdentityRequest": { + "type": "object", + "properties": { + "person_details": { + "$ref": "#/components/schemas/PersonDetails" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "API User-facing metadata" + }, + "ref_id": { + "type": "string", + "description": "A user-facing ID to prevent duplicate identity creation. Unique for all identities created by the same API user." + }, + "institution_details": { + "$ref": "#/components/schemas/InstitutionDetails" + }, + "institution_members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InstitutionMember" + }, + "title": "Institution members if identity type is institution" + }, + "tax_details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaxDetail" + }, + "description": "List of tax details associated with the identity. Must be set if tax_details_not_required is false or not set." + }, + "tax_details_not_required": { + "type": "boolean", + "description": "Set to true if tax details are not legally required." + }, + "customer_due_diligence": { + "$ref": "#/components/schemas/CustomerDueDiligence" + }, + "is_merchant": { + "type": "boolean", + "description": "Set to true to indicate that this identity is a merchant." + } + } + }, + "CustomerDueDiligence": { + "type": "object", + "properties": { + "aliases": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of alternate names or aliases associated with the Identity." + }, + "estimated_net_worth": { + "$ref": "#/components/schemas/CustomerDueDiligenceNetWorthRange" + }, + "estimated_yearly_income": { + "$ref": "#/components/schemas/CustomerDueDiligenceYearlyIncomeRange" + }, + "expected_transfer_value": { + "$ref": "#/components/schemas/CustomerDueDiligenceTransferValueRange" + }, + "source_of_wealth": { + "$ref": "#/components/schemas/WealthSource" + }, + "source_of_funds": { + "$ref": "#/components/schemas/FundsSource" + }, + "purpose_of_account": { + "$ref": "#/components/schemas/AccountPurpose" + }, + "employment_status": { + "$ref": "#/components/schemas/EmploymentStatus" + }, + "employment_industry_sector": { + "$ref": "#/components/schemas/InstitutionSubType" + }, + "industry_sector": { + "$ref": "#/components/schemas/InstitutionSubType" + }, + "has_underlying_trust_structure": { + "type": "boolean", + "description": "Whether or not the institution tied to the Identity has an underlying trust structure." + }, + "has_nominee_shareholders": { + "type": "boolean", + "description": "Whether or not the institution tied to the Identity has nominee shareholders." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "When the customer due diligence was created" + }, + "is_publicly_traded": { + "type": "boolean", + "description": "`true` or `false` indicating whether or not the company is listed on a public stock exchange." + }, + "merchant_funding_source": { + "$ref": "#/components/schemas/MerchantFundingSourceFundingSource" + }, + "customer_regions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerRegion" + }, + "description": "Regions where the customer base is located." + } + } + }, + "CustomerRegion": { + "type": "string", + "enum": [ + "US_CANADA", + "MEXICO_CENTRAL_AMERICA", + "SOUTH_AMERICA", + "EUROPE", + "ASIA", + "AFRICA", + "OCEANIA" + ] + }, + "DocumentDescription": { + "type": "object", + "properties": { + "file_id": { + "type": "string", + "title": "The document id" + }, + "name": { + "type": "string", + "title": "The file name" + }, + "document_types": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentType" + }, + "title": "The document types contained within the document" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "When the document was created" + }, + "archived_at": { + "type": "string", + "format": "date-time", + "title": "When the document was archived" + } + } + }, + "DocumentType": { + "type": "string", + "enum": [ + "OTHER_DOCUMENTS", + "APPLICATION", + "ORGANIZATIONAL_DOCUMENTS", + "CERTIFICATE_OF_GOOD_STANDING", + "TAX_IDENTIFICATION", + "IDENTITY_VERIFICATION", + "PROOF_OF_RESIDENCY", + "PROOF_OF_FUNDS", + "SAMPLE_INVOICE", + "OPERATING_AGREEMENT", + "TRUST_DOCUMENTS", + "MONEY_SERVICE_DOCUMENTS", + "INVESTMENT_DOCUMENTS", + "CURP", + "AML_DOCUMENTS", + "FUND_STRUCTURE_CHART", + "FUND_MANAGER_REGISTRATION", + "MEMORANDUM_OF_ASSOCIATION", + "ORGANIZATIONAL_CHART", + "FOUNDATION_BY_LAWS", + "APPOINTMENT_OF_GUARDIAN_EVIDENCE", + "LEGAL_DOMICILE_OF_BENEFICIAL_OWNERS", + "GOVERNING_BODY_MEMBER_NAMES" + ] + }, + "DocumentUploadResponse": { + "type": "object", + "properties": { + "file_id": { + "type": "string", + "description": "The id assigned to the file." + }, + "name": { + "type": "string", + "description": "The file name." + }, + "upload_url": { + "type": "string", + "description": "The URI where we expect the file to be uploaded into." + } + } + }, + "EmploymentStatus": { + "type": "string", + "enum": [ + "CONTRACTUAL", + "FULL_TIME", + "PART_TIME", + "RETIRED", + "SELF_EMPLOYED", + "STUDENT", + "UNEMPLOYED" + ] + }, + "FundsSource": { + "type": "string", + "enum": [ + "SALARY_DISBURSEMENT", + "INHERITANCE_DISTRIBUTION", + "INVESTMENT_RETURNS", + "BUSINESS_DIVIDENDS_PROFITS", + "PROPERTY_SALE", + "LOAN_DISBURSEMENT", + "SAVINGS_ACCOUNT_WITHDRAWAL", + "GOVERNMENT_BENEFITS" + ] + }, + "Identity": { + "type": "object", + "example": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "summary_status": "PENDING" + }, + "properties": { + "id": { + "type": "string", + "title": "The id used for all other interactions with this account" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "API User-facing metadata" + }, + "status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "status_details"cle: { + "$ref": "#/components/schemas/IdentityStatus" + }, + "user_disabled": { + "type": "boolean", + "title": "true if the account has been disabled by the API user" + }, + "admin_disabled": { + "type": "boolean", + "title": "true if the account has been disabled by a Paxos admin" + }, + "person_details": { + "$ref": "#/components/schemas/PersonDetails" + }, + "type": { + "$ref": "#/components/schemas/IdentityType" + }, + "ref_id": { + "type": "string", + "description": "A user-facing ID to prevent duplicate account creation. Unique for all accounts created by the same API user." + }, + "institution_details": { + "$ref": "#/components/schemas/InstitutionDetails" + }, + "institution_members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InstitutionMember" + }, + "title": "members associated with institution identity type" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the identity is created at. RFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`. ex: `2006-01-02T15:04:05Z`." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the identity is updated at. RFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`. ex: `2006-01-02T15:04:05Z`." + }, + "tax_details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaxDetail" + }, + "title": "tax payer details" + }, + "tax_details_not_required": { + "type": "boolean", + "title": "whether or not tax_details are legally required" + }, + "summary_tin_verification_status": { + "$ref": "#/components/schemas/TINVerificationStatus" + }, + "customer_due_diligence": { + "$ref": "#/components/schemas/CustomerDueDiligence" + }, + "is_merchant": { + "type": "boolean", + "description": "True if the identity is a merchant." + }, + "last_kyc_refresh_date": { + "type": "string", + "format": "date-time", + "description": "The last timestamp the identity has undergone a periodic kyc refresh. RFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`. ex: `2006-01-02T15:04:05Z`." + } + }, + "required": [ + "id" + ] + }, + "IdentityMailingAddress": { + "type": "object", + "properties": { + "country": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "address1": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "address2": { + "type": "string", + "description": "To clear address2 (i.e. when updating an identity), set address2 to an empty string (\"\").", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "city": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "province": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "zip_code": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + } + }, + "description": "A mailing address.", + "required": [ + "country", + "address1", + "city", + "province" + ] + }, + "IdentityStatus": { + "type": "string", + "enum": [ + "PENDING", + "ERROR", + "APPROVED", + "DENIED", + "DISABLED" + ], + "title": "" + }, + "IdentityType": { + "type": "string", + "enum": [ + "PERSON", + "INSTITUTION" + ] + }, + "InstitutionCIPIDType": { + "type": "string", + "enum": [ + "EIN", + "SSN", + "ITIN", + "REGISTRATION_NUMBER" + ], + "title": "" + }, + "InstitutionDetails": { + "type": "object", + "properties": { + "sanctions_verification_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "name": { + "type": "string", + "title": "Allowed in create and update", + "maxLength": 200, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "business_address": { + "$ref": "#/components/schemas/IdentityMailingAddress" + }, + "phone_number": { + "type": "string", + "title": "Allowed in create and update" + }, + "email": { + "type": "string", + "title": "Allowed in create and update" + }, + "institution_type": { + "$ref": "#/components/schemas/InstitutionType" + }, + "institution_sub_type": { + "$ref": "#/components/schemas/InstitutionSubType" + }, + "cip_id": { + "type": "string", + "title": "Allowed in create and update\nSSN format: xxx-xx-xxxx\nITIN format: xxx-xx-xxxx\nEIN format: xx-xxxxxxx", + "maxLength": 200, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "cip_id_type": { + "$ref": "#/components/schemas/InstitutionCIPIDType" + }, + "cip_id_country": { + "type": "string", + "description": "Allowed in create and update. Must be an ISO 3166-1 alpha 3 code." + }, + "govt_registration_date": { + "type": "string", + "format": "date-time", + "title": "date at which the institution is registered with govt" + }, + "incorporation_address": { + "$ref": "#/components/schemas/IdentityMailingAddress" + }, + "regulation_status": { + "$ref": "#/components/schemas/RegulationStatus" + }, + "trading_type": { + "$ref": "#/components/schemas/TradingType" + }, + "listed_exchange": { + "type": "string", + "title": "exchange in which the institution is listed" + }, + "ticker_symbol": { + "type": "string", + "description": "Ticker symbol of the institution if publicly traded or ticker symbol of the parent institution." + }, + "parent_institution_name": { + "type": "string", + "title": "name of the parent institution if the institution is a subsidiary of parent institution" + }, + "regulator_name": { + "type": "string", + "title": "name of the financial regulator" + }, + "regulator_jurisdiction": { + "type": "string", + "title": "country or jurisdiction of financial regulator" + }, + "regulator_register_number": { + "type": "string", + "title": "registrar number of regulator" + }, + "document_verification_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "additional_screening_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "doing_business_as": { + "type": "string", + "title": "Allowed in create and update" + }, + "business_description": { + "type": "string", + "title": "free text description of business" + } + } + }, + "InstitutionMember": { + "type": "object", + "properties": { + "identity_id": { + "type": "string", + "title": "The ID of the member identity" + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InstitutionRoleType" + }, + "title": "The type of membership this identity has in the institution" + }, + "ownership": { + "type": "string", + "description": "Decimal number representing the percent ownership the identity has in the company-- e.g. 5 represents 5% ownership." + }, + "position": { + "type": "string", + "title": "The position the identity holds with the company" + }, + "name": { + "type": "string", + "title": "Member's full name. Not writable from API" + }, + "summary_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "id": { + "type": "string", + "description": "Institution member ID. Note: This field is auto-generated. Specifying an ID when creating an institution member is a client error." + } + } + }, + "InstitutionRoleType": { + "type": "string", + "enum": [ + "BENEFICIAL_OWNER", + "ACCOUNT_OPENER", + "TRUSTEE", + "AUTHORIZED_USER", + "GRANTOR", + "MANAGEMENT_CONTROL_PERSON", + "BENEFICIARY" + ], + "title": "" + }, + "InstitutionSubType": { + "type": "string", + "enum": [ + "INVESTMENT", + "HEDGE_FUND", + "MONEY_SERVICE_BUSINESS", + "STO_ISSUER", + "PRECIOUS_METALS", + "NON_PROFIT", + "REGISTERED_INVESTMENT_ADVISOR", + "AGRICULTURE_FORESTRY_FISHING_HUNTING", + "MINING", + "UTILITIES", + "CONSTRUCTION", + "MANUFACTURING", + "WHOLESALE_TRADE", + "RETAIL_TRADE", + "TRANSPORTATION_WAREHOUSING", + "INFORMATION", + "FINANCE_INSURANCE", + "REAL_ESTATE_RENTAL_LEASING", + "PROFESSIONAL_SCIENTIFIC_TECHNICAL_SERVICES", + "MANAGEMENT_OF_COMPANIES_ENTERPRISES", + "ADMINISTRATIVE_SUPPORT_WASTE_MANAGEMENT_REMEDIATION_SERVICES", + "EDUCATIONAL_SERVICES", + "HEALTH_CARE_SOCIAL_ASSISTANCE", + "ARTS_ENTERTAINMENT_RECREATION", + "ACCOMMODATION_FOOD_SERVICES", + "OTHER_SERVICES", + "PUBLIC_ADMINISTRATION", + "NOT_CLASSIFIED", + "ADULT_ENTERTAINMENT", + "AUCTIONS", + "AUTOMOBILES", + "BLOCKCHAIN", + "CRYPTO", + "DRUGS", + "EXPORT_IMPORT", + "E_COMMERCE", + "FINANCIAL_INSTITUTION", + "GAMBLING", + "INSURANCE", + "MARKET_MAKER", + "SHELL_BANK", + "TRAVEL_TRANSPORT", + "WEAPONS" + ], + "title": "" + }, + "InstitutionType": { + "type": "string", + "enum": [ + "TRUST", + "CORPORATION", + "LLC", + "PARTNERSHIP" + ], + "title": "" + }, + "ListIdentitiesResponse": { + "type": "object", + "properties": { + "next_page_cursor": { + "type": "string", + "description": "Cursor token required for fetching the next page." + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Identity" + }, + "description": "The result list of identities." + } + } + }, + "ListIdentityDocumentsResponse": { + "type": "object", + "properties": { + "documents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentDescription" + }, + "title": "A list of documents" + }, + "pending_documents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentType" + }, + "title": "The document types that are mandatory for the identity but are missing" + } + } + }, + "PassthroughVerifierType": { + "type": "string", + "enum": [ + "JUMIO", + "ALLOY", + "LEXISNEXIS", + "MITEK", + "SUMSUB", + "MICROBILT", + "ONFIDO", + "CUSTOMER", + "EQUIFAX", + "ID3_AUTHENTICATE", + "FIS", + "PROVE", + "PERSONA", + "PLAID" + ] + }, + "PersonDetails": { + "type": "object", + "properties": { + "id_verification_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "sanctions_verification_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "first_name": { + "type": "string", + "title": "Allowed in create and update", + "maxLength": 200, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "last_name": { + "type": "string", + "title": "Allowed in create and update", + "maxLength": 200, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "date_of_birth": { + "type": "string", + "title": "Allowed in create and update", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "govt_id": { + "type": "string", + "title": "DEPRECATED: use cip_id instead", + "maxLength": 200, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "address": { + "$ref": "#/components/schemas/IdentityMailingAddress" + }, + "phone_number": { + "type": "string", + "title": "Allowed in create and update" + }, + "email": { + "type": "string", + "title": "Allowed in create and update" + }, + "nationality": { + "type": "string", + "description": "Allowed in create and update. Must be an ISO 3166-1 alpha 3 code.", + "pattern": "^[A-Z]{3}$" + }, + "verifier_id": { + "type": "string", + "description": "Allowed in create and update. The id used by the external verifier." + }, + "verifier_type": { + "$ref": "#/components/schemas/identityprotoVerifierType" + }, + "id_verification_url": { + "type": "string", + "title": "Conditionally contains a url for ID verification" + }, + "passthrough_verifier_type": { + "$ref": "#/components/schemas/PassthroughVerifierType" + }, + "passthrough_verified_at": { + "type": "string", + "format": "date-time", + "title": "When PASSTHROUGH verifier is used, this specifies the time that ID verification was completed" + }, + "govt_id_type": { + "$ref": "#/components/schemas/PersonDetailsCIPIDType" + }, + "cip_id": { + "type": "string", + "title": "SSN or TIN, unique for each Identity object. Allowed in create and update\nSSN format: xxx-xx-xxxx\nITIN format: xxx-xx-xxxx\nEIN format: xx-xxxxxxx", + "maxLength": 200, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "cip_id_type": { + "$ref": "#/components/schemas/PersonDetailsCIPIDType" + }, + "cip_id_country": { + "type": "string", + "description": "Allowed in create and update. Must be an ISO 3166-1 alpha 3 code." + }, + "additional_screening_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "profession": { + "type": "string", + "description": "Allowed in create and update." + }, + "middle_name": { + "type": "string", + "title": "Allowed in create and update", + "maxLength": 200 + }, + "country_of_birth": { + "type": "string", + "description": "Allowed in create and update." + }, + "passthrough_verification_id": { + "type": "string", + "description": "Unique identifier for the underlying person's ID verification record." + }, + "passthrough_verification_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "passthrough_verification_fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PassthroughVerificationField" + }, + "description": "List of verification fields used by the external verifier to validate the person's identity." + } + } + }, + "RegulationStatus": { + "type": "string", + "enum": [ + "US_REGULATED", + "INTL_REGULATED", + "NON_REGULATED" + ] + }, + "TINVerificationStatus": { + "type": "string", + "enum": [ + "TIN_VERIFICATION_PENDING", + "TIN_VERIFICATION_ERROR", + "TIN_VERIFICATION_VALID" + ], + "description": "The TIN verification status for the associated `tax_payer_id`." + }, + "TaxDetail": { + "type": "object", + "properties": { + "tax_payer_id": { + "type": "string", + "title": "For U.S. citizens it is the SSN, TIN or EIN. For Brazil citizens, it is the CPF. Allowed in create and update", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "tax_payer_country": { + "type": "string", + "title": "Allowed in create and update. Must be an ISO 3166-1 alpha 3 code" + }, + "tin_verification_status": { + "$ref": "#/components/schemas/TINVerificationStatus" + } + } + }, + "TradingType": { + "type": "string", + "enum": [ + "PRIVATE", + "PUBLIC", + "PUBLICLY_TRADED_SUBSIDIARY" + ] + }, + "WealthSource": { + "type": "string", + "enum": [ + "INHERITANCE", + "INVESTMENT_GAINS", + "BUSINESS_OWNERSHIP_DIVIDENDS", + "EMPLOYMENT_INCOME", + "REAL_ESTATE", + "OTHER_SOURCE_OF_WEALTH" + ] + }, + "AddInstitutionMembersRequest": { + "type": "object", + "properties": { + "institution_id": { + "type": "string", + "description": "ID of institution identity to which members will be added." + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InstitutionMember" + }, + "description": "A non-empty array of institution members to be added." + } + }, + "required": [ + "institution_id", + "members" + ] + }, + "AddInstitutionMembersResponse": { + "type": "object", + "properties": { + "institution_id": { + "type": "string", + "description": "ID of institution identity to which members were added." + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InstitutionMember" + }, + "description": "List of institution members that were added to the institution." + } + } + }, + "DeleteInstitutionMemberResponse": { + "type": "object" + }, + "AccountAccountType": { + "type": "string", + "enum": [ + "BROKERAGE", + "TRADITIONAL_IRA", + "ROTH_IRA", + "SEP_IRA", + "FINANCIAL_ADVISOR" + ] + }, + "AccountMemberAccountRoleType": { + "type": "string", + "enum": [ + "BENEFICIAL_OWNER", + "AUTHORIZED_USER", + "FINANCIAL_ADVISOR" + ] + }, + "Account": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id used for all other interactions with this account." + }, + "identity_id": { + "type": "string", + "description": "The primary identity associated with the account." + }, + "description": { + "type": "string", + "description": "A free-text description of the account." + }, + "admin_disabled": { + "type": "boolean", + "description": "true if the account has been disabled by a Paxos admin." + }, + "user_disabled": { + "type": "boolean", + "description": "true if the account has been disabled by the API user." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "API User-facing metadata." + }, + "ref_id": { + "type": "string", + "description": "A user-facing ID to prevent duplicate account creation. Unique for all accounts created by the same API user." + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountMember" + }, + "description": "Additional Identities with varying types of access to this account." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time this account was created." + }, + "summary_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "The time this account was updated." + }, + "profile_id": { + "type": "string", + "description": "The ID of the profile created for the account when `create_profile=true`.\nThe [Profile](#tag/Profiles) type is `NORMAL`.\nThe field is omitted when the account has no associated [Profile](#tag/Profiles)." + }, + "type": { + "$ref": "#/components/schemas/AccountAccountType" + } + } + }, + "AccountMember": { + "type": "object", + "properties": { + "identity_id": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/AccountMemberAccountRoleType" + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountMemberAccountRoleType" + } + }, + "id": { + "type": "string", + "description": "Account member ID. Note: This field is auto-generated. Specifying an ID when creating an account member is a client error." + } + } + }, + "CreateAccountRequest": { + "type": "object", + "properties": { + "account": { + "$ref": "#/components/schemas/Account" + }, + "create_profile": { + "type": "boolean", + "description": "Create a new profile for this account.\nSet to `true` to track user balances at the Profile level for this account.\nSee also [Profiles](#tag/Profiles)." + } + }, + "required": [ + "account" + ], + "example": { + "account": { + "identity_id": "82c338f4-3cb7-4d9b-be2a-4b077c82ee3a", + "ref_id": "fec36070-4c23-48ac-9ee1-df338b8233fc", + "description": "Individual account for John Doe", + "metadata": { + "custom_field": "custom_value" + } + } + } + }, + "ListAccountsRequestOrderBy": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + }, + "ListAccountsResponse": { + "type": "object", + "properties": { + "next_page_cursor": { + "type": "string", + "description": "Cursor token required for fetching the next page." + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Account" + }, + "description": "The result list of accounts." + } + } + }, + "UpdateAccountRequest": { + "type": "object", + "properties": { + "account": { + "$ref": "#/components/schemas/Account" + }, + "set_user_disabled": { + "type": "boolean", + "description": "true if the account is required to be disabled by the API user." + } + }, + "required": [ + "account" + ] + }, + "AddAccountMembersRequest": { + "type": "object", + "properties": { + "account_id": { + "type": "string", + "description": "ID of account to which members will be added." + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountMember" + }, + "description": "A non-empty array of account members to be added." + } + }, + "required": [ + "account_id", + "members" + ] + }, + "AddAccountMembersResponse": { + "type": "object", + "properties": { + "account_id": { + "type": "string", + "description": "ID of account to which members were added." + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountMember" + }, + "description": "List of account members that were added to the account." + } + } + }, + "DeleteAccountMemberResponse": { + "type": "object" + }, + "IdentitySandboxSandboxSetIdentityStatusBody": { + "type": "object", + "example": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "id_verification_status": "APPROVED", + "sanctions_verification_status": "APPROVED" + }, + "properties": { + "id_verification_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "sanctions_verification_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "user_disabled": { + "$ref": "#/components/schemas/SetDisable" + }, + "admin_disabled": { + "$ref": "#/components/schemas/SetDisable" + }, + "document_verification_status": { + "$ref": "#/components/schemas/IdentityStatus" + }, + "additional_screening_status": { + "$ref": "#/components/schemas/IdentityStatus" + } + }, + "title": "SandboxSetIdentityStatusRequest" + }, + "SandboxSetIdentityResponse": { + "type": "object" + }, + "SetDisable": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean" + } + } + }, + "ExchangePublicCreateOrderBody": { + "type": "object", + "example": { + "side": "BUY", + "market": "ETHUSD", + "type": "LIMIT", + "price": "190.23", + "base_amount": "2.35781498", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + }, + "properties": { + "ref_id": { + "type": "string", + "description": "The idempotence ID for order creation. Can be reused if the order has been closed for more than 24 hours." + }, + "side": { + "$ref": "#/components/schemas/OrderSide" + }, + "market": { + "$ref": "#/components/schemas/Market" + }, + "type": { + "$ref": "#/components/schemas/OrderType" + }, + "base_amount": { + "type": "string", + "description": "The base currency amount for any limit order or the exact amount to sell for a market sell order.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "price": { + "type": "string", + "description": "The quote price." + }, + "quote_amount": { + "type": "string", + "description": "The quote currency amount of purchase for a market buy order.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Metadata to store on the quote and created order.\nUp to 6 key/value pairs may be stored, with each key and value at most 100 characters." + }, + "await_fill_millis": { + "type": "integer", + "format": "int64", + "description": "The amount of time to wait for the order to fill, in milliseconds.\nWhen `await_fill_millis` is set to a non-zero value, the Create Order call does not return immediately on order creation. Instead, the call blocks until either:\n 1. The order has filled completely\n 2. The time `await_fill_millis` has elapsed\nThe maximum wait timeout is 10 seconds (10000 milliseconds).", + "maximum": 10000 + }, + "time_in_force": { + "$ref": "#/components/schemas/TimeInForce" + }, + "expiration_date": { + "type": "string", + "format": "uint64", + "description": "The date the order will expire if not completed when specified time in force is GTT.\nFormat is a unix timestamp in milliseconds (13-digits) UTC (total milliseconds that have elapsed since January 1st, 1970 UTC)." + }, + "identity_id": { + "type": "string", + "description": "The end user that requests the trade. This field must be used in conjunction with `identity_account_id`, otherwise the order is rejected. Depending on your integration type, `identity_id` and `identity_account_id` may be required." + }, + "identity_account_id": { + "type": "string", + "description": "The account under which this order is placed. The provided identity must be allowed to trade on behalf of this account. This field must be used in conjunction with `identity_id`, otherwise the order is rejected. Depending on your integration type, `identity_account_id` and `identity_id` may be required." + }, + "stop_price": { + "type": "string", + "title": "The stop price at which a stop order will trigger" + }, + "recipient_profile_id": { + "type": "string", + "description": "The profileId that will receive settled currency (base for buy orders, quote for sell orders)." + }, + "self_match_prevention_id": { + "type": "string", + "description": "The string field used to prevent matching against an opposite side order submitted by the same Crypto Brokerage customer. If this field is not submitted, an order that matches against another order submitted by the same customer will cancel the original resting order. Up to 36 characters are supported.\nThis field requires additional permissions only available to certain accounts. Reach out to your Paxos Representative for more information." + } + }, + "title": "Create Order Request", + "required": [ + "side", + "market", + "type" + ] + }, + "ExchangePublicCreateQuoteExecutionBody": { + "type": "object", + "example": { + "quote_id": "366a26d2-3098-4226-a520-4bb43ae4d922", + "quote_amount": "14102.82", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + }, + "properties": { + "quote_id": { + "type": "string", + "description": "The ID of the held Quote for buying or selling some asset." + }, + "ref_id": { + "type": "string", + "description": "A unique identifier for the quote execution (for idempotence)." + }, + "base_amount": { + "type": "string", + "description": "The amount of the base asset (crypto) to buy or sell using the specified quote. The maximum precision is 8 decimals.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "quote_amount": { + "type": "string", + "description": "The amount of the quote asset (fiat) to spend or acquire using the specified quote. The maximum precision is 2 decimals.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Metadata to store on the quote execution.\nUp to 6 key/value pairs may be stored, with each key and value at most 100 characters." + }, + "identity_id": { + "type": "string", + "description": "The end user that requests the quote execution." + }, + "account_id": { + "type": "string", + "description": "The account under which this quote execution is placed. The provided identity must be allowed to trade on behalf of this account." + }, + "recipient_profile_id": { + "type": "string", + "description": "The ID of the profile under which to deposit the funds." + } + }, + "title": "Create Quote Execution Request", + "required": [ + "quote_id" + ] + }, + "PricePriceMarket": { + "type": "string", + "enum": [ + "ETHUSD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD" + ], + "description": "", + "title": "Market" + }, + "apiHttpBody": { + "type": "object", + "properties": { + "content_type": { + "type": "string", + "description": "The HTTP Content-Type header value specifying the content type of the body." + }, + "data": { + "type": "string", + "format": "byte", + "description": "The HTTP request/response body as raw binary." + }, + "extensions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/bufAny" + }, + "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs." + } + }, + "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." + }, + "BookLevel": { + "type": "object", + "properties": { + "price": { + "type": "string", + "description": "Price at level." + }, + "amount": { + "type": "string", + "description": "Amount of orders at pricing level." + } + } + }, + "CancelOrderResponse": { + "type": "object" + }, + "ExchangeStats": { + "type": "object", + "properties": { + "high": { + "type": "string", + "description": "Highest price in range." + }, + "low": { + "type": "string", + "description": "Lowest price in range." + }, + "open": { + "type": "string", + "description": "First price in range." + }, + "volume": { + "type": "string", + "title": "Total Volume in Time Period" + }, + "volume_weighted_average_price": { + "type": "string", + "description": "Volume-Weighted Average Price over Time Period." + }, + "range": { + "$ref": "#/components/schemas/TimestampRange" + } + } + }, + "Execution": { + "type": "object", + "properties": { + "execution_id": { + "type": "string", + "format": "uint64", + "title": "Unique Execution id" + }, + "order_id": { + "type": "string", + "description": "The UUID of the order associated with the execution." + }, + "executed_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp of the execution." + }, + "market": { + "$ref": "#/components/schemas/Market" + }, + "side": { + "$ref": "#/components/schemas/OrderSide" + }, + "amount": { + "type": "string", + "description": "Execution amount." + }, + "price": { + "type": "string", + "description": "Execution price." + }, + "commission": { + "type": "string", + "description": "Amount of commission paid." + }, + "commission_asset": { + "type": "string", + "description": "Currency of Commission payment. Fiat Only (USD, EUR, SGD)." + }, + "rebate": { + "type": "string", + "description": "Amount of rebate applied." + }, + "rebate_asset": { + "type": "string", + "description": "Currency of the rebate. Fiat Only (USD, EUR, SGD)." + }, + "account_id": { + "type": "string", + "description": "Account ID associated with the execution." + }, + "gross_trade_amount": { + "type": "string", + "description": "The total asset traded (asset amount multiplied by price paid)." + } + } + }, + "HistoricalPrice": { + "type": "object", + "properties": { + "average_price": { + "type": "string", + "description": "Time-weighted average price over the specified time period, beginning at the defined timestamp.\nFor example, if `increment` is set to `ONE_HOUR`, then `average_price` is the time-weighted average for an hour.\nThe entire time period must be completed to display results." + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "Timestamp at the beginning of an increment." + } + } + }, + "Increment": { + "type": "string", + "enum": [ + "ONE_MINUTE", + "FIVE_MINUTES", + "FIFTEEN_MINUTES", + "THIRTY_MINUTES", + "ONE_HOUR", + "TWO_HOURS", + "TWELVE_HOURS", + "ONE_DAY", + "ONE_WEEK", + "TWO_WEEKS", + "FOUR_WEEKS" + ] + }, + "ListExecutionsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Execution" + } + }, + "next_page_cursor": { + "type": "string", + "description": "Cursor token required for fetching the next page." + } + } + }, + "ListHistoricalPricesResponse": { + "type": "object", + "properties": { + "total_count": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoricalPrice" + }, + "description": "List of historical prices." + } + } + }, + "ListMarketsResponse": { + "type": "object", + "properties": { + "markets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MarketDetails" + } + } + } + }, + "ListOrdersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Order" + } + }, + "next_page_cursor": { + "type": "string", + "description": "Cursor token required for fetching the next page." + } + } + }, + "ListPricesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pricing" + } + } + } + }, + "ListQuoteExecutionsResponse": { + "type": "object", + "properties": { + "total_count": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QuoteExecution" + } + }, + "next_page_cursor": { + "type": "string", + "description": "Cursor token required for fetching the next page." + } + } + }, + "ListQuotesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Quote" + } + } + } + }, + "ListRecentExecutionsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RecentExecution" + }, + "description": "Recent Executions." + } + } + }, + "ListTickersResponse": { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TickerRecord" + } + } + } + }, + "Market": { + "type": "string", + "enum": [ + "ETHEUR", + "ETHSGD", + "ETHUSD", + "BTCEUR", + "BTCSGD", + "BTCUSD", + "PAXGUSD", + "BCHUSD", + "LTCUSD", + "USDPUSD", + "LINKUSD", + "MATICUSD", + "AAVEUSD", + "UNIUSD" + ], + "title": "" + }, + "MarketDetails": { + "type": "object", + "properties": { + "market": { + "$ref": "#/components/schemas/Market" + }, + "base_asset": { + "type": "string", + "title": "Base asset. Crypto Only (BTC, ETH, PAXG)" + }, + "quote_asset": { + "type": "string", + "description": "Quote asset. Fiat Only (USD, EUR, SGD)." + }, + "tick_rate": { + "type": "string", + "title": "Tick rate for market" + } + } + }, + "Order": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The UUID of the order." + }, + "profile_id": { + "type": "string", + "description": "The profile ID the order is associated with." + }, + "ref_id": { + "type": "string", + "description": "The idempotence ID for order creation. Can be reused if the order has been closed for more than 24 hours." + }, + "status": { + "$ref": "#/components/schemas/OrderStatus" + }, + "side": { + "$ref": "#/components/schemas/OrderSide" + }, + "market": { + "$ref": "#/components/schemas/Market" + }, + "type": { + "$ref": "#/components/schemas/OrderType" + }, + "base_amount": { + "type": "string", + "description": "The base amount or purchase amount for a market sell order." + }, + "price": { + "type": "string", + "description": "The quote price." + }, + "quote_amount": { + "type": "string", + "description": "The quote amount of purchase for a market buy order." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Client-specified metadata." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the order was created." + }, + "modified_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the order was last modified." + }, + "amount_filled": { + "type": "string", + "description": "The amount that was filled." + }, + "volume_weighted_average_price": { + "type": "string", + "description": "The volume-weighted average price." + }, + "time_in_force": { + "$ref": "#/components/schemas/TimeInForce" + }, + "expiration_date": { + "type": "string", + "format": "date-time", + "description": "The date the order will expire if not completed when specified time in force is GTT." + }, + "identity_id": { + "type": "string", + "description": "The end user that requests the trade. This field must be used in conjunction with `identity_account_id`, otherwise the order is rejected. Depending on your integration type, `identity_id` and `identity_account_id` may be required." + }, + "identity_account_id": { + "type": "string", + "description": "The account under which this order is placed. The provided identity must be allowed to trade on behalf of this account. This field must be used in conjunction with `identity_id`, otherwise the order is rejected. Depending on your integration type, `identity_account_id` and `identity_id` may be required." + }, + "stop_price": { + "type": "string", + "title": "The stop price for a stop order" + }, + "recipient_profile_id": { + "type": "string", + "description": "The profileId that will receive settled currency (base for buy orders, quote for sell orders)." + }, + "is_triggered": { + "type": "boolean", + "description": "Returns `true` when a stop order has been triggered." + } + } + }, + "OrderBy": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + }, + "OrderSide": { + "type": "string", + "enum": [ + "BUY", + "SELL" + ], + "description": "Trade side." + }, + "OrderStatus": { + "type": "string", + "enum": [ + "PENDING_SUBMISSION", + "SUBMITTED", + "OPEN", + "FILLED", + "CANCELLED", + "REJECTED" + ] + }, + "OrderType": { + "type": "string", + "enum": [ + "LIMIT", + "MARKET", + "POST_ONLY_LIMIT", + "STOP_MARKET", + "STOP_LIMIT" + ], + "description": "Trade type." + }, + "Pagination": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "format": "int32", + "title": "Number of results to return" + }, + "offset": { + "type": "integer", + "format": "int32", + "title": "Number of results to skip" + } + } + }, + "Pricing": { + "type": "object", + "properties": { + "market": { + "$ref": "#/components/schemas/PricePriceMarket" + }, + "current_price": { + "type": "string", + "description": "The current price for the given market." + }, + "yesterday_price": { + "type": "string", + "description": "The one-minute average price from 24 hours ago. Updates once per minute." + }, + "snapshot_at": { + "type": "string", + "format": "date-time", + "description": "The time when the price was generated. RFC3339 format, like `2023-01-03T18:27:40.294528Z`." + } + } + }, + "Quote": { + "type": "object", + "example": { + "id": "366a26d2-3098-4226-a520-4bb43ae4d922", + "market": "BTCUSD", + "side": "BUY", + "price": "6001.2", + "base_asset": "BTC", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:08Z", + "expires_at": "2020-01-17T18:36:38Z" + }, + "properties": { + "id": { + "type": "string", + "description": "The UUID of the quote." + }, + "market": { + "$ref": "#/components/schemas/Market" + }, + "side": { + "$ref": "#/components/schemas/OrderSide" + }, + "price": { + "type": "string", + "description": "The guaranteed price, held until expires_at." + }, + "base_asset": { + "type": "string", + "description": "The \"base\" side of the trading pair (crypto - like BTC, ETH, PAXG)." + }, + "quote_asset": { + "type": "string", + "description": "The \"quote\" side of the trading pair (fiat - like USD, EUR, SGD)." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the quote was first offered." + }, + "expires_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the quote expires." + } + }, + "description": "A Quote is a guaranteed price to buy or sell on a particular market for a\nlimited period of time (a \"held rate\").", + "required": [ + "id", + "market", + "side", + "price", + "base_asset", + "quote_asset", + "created_at", + "expires_at" + ] + }, + "QuoteExecution": { + "type": "object", + "example": { + "id": "43a59965-be3a-45ab-841d-c55386e0ff90", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "quote_id": "366a26d2-3098-4226-a520-4bb43ae4d922", + "status": "SETTLED", + "market": "BTCUSD", + "side": "BUY", + "price": "6001.2", + "base_amount": "2.35", + "base_asset": "BTC", + "quote_amount": "14102.82", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:31.345Z", + "settled_at": "2020-01-17T18:36:32.123Z", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + }, + "properties": { + "id": { + "type": "string", + "description": "The UUID of the quote execution." + }, + "profile_id": { + "type": "string", + "description": "The ID of the profile under which this order executed." + }, + "quote_id": { + "type": "string", + "description": "The ID of the quote used to create this quote execution." + }, + "ref_id": { + "type": "string", + "description": "A unique identifier for the quote execution creation (for idempotence)." + }, + "status": { + "$ref": "#/components/schemas/QuoteExecutionStatus" + }, + "market": { + "$ref": "#/components/schemas/Market" + }, + "side": { + "$ref": "#/components/schemas/OrderSide" + }, + "price": { + "type": "string", + "description": "The guaranteed price of the quote." + }, + "base_amount": { + "type": "string", + "description": "The amount of assets (crypto) in the transaction." + }, + "base_asset": { + "type": "string", + "description": "The \"base\" side of the trading pair (crypto - like BTC, ETH, PAXG)." + }, + "quote_amount": { + "type": "string", + "description": "The amount of quote currency (cash) in the transaction." + }, + "quote_asset": { + "type": "string", + "description": "The \"quote\" side of the trading pair (fiat - like USD, EUR, SGD)." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the quote execution was created." + }, + "settled_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the quote execution was settled, completing its lifecycle." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Client-specified metadata." + }, + "identity_id": { + "type": "string", + "description": "The identity under which this quote execution is placed." + }, + "account_id": { + "type": "string", + "description": "The account under which this quote execution is placed." + }, + "recipient_profile_id": { + "type": "string", + "description": "The ID of the profile under which to deposit the funds." + } + }, + "description": "A QuoteExecution is an order to buy or sell an asset at a particular held Quote.", + "required": [ + "id", + "profile_id", + "quote_id", + "status", + "market", + "side", + "price", + "base_amount", + "base_asset", + "quote_amount", + "quote_asset", + "created_at" + ] + }, + "QuoteExecutionStatus": { + "type": "string", + "enum": [ + "CREATED", + "SETTLED" + ], + "description": "A QuoteExecution begins in state `CREATED` and transitions to end state `SETTLED`\nwhen all accounting movements are complete." + }, + "RecentExecution": { + "type": "object", + "properties": { + "match_number": { + "type": "string", + "description": "Unique execution match number." + }, + "price": { + "type": "string", + "description": "Price of the execution." + }, + "amount": { + "type": "string", + "description": "Amount of the execution." + }, + "executed_at": { + "type": "string", + "description": "Execution timestamp." + } + } + }, + "TickerRecord": { + "type": "object", + "properties": { + "market": { + "$ref": "#/components/schemas/PricePriceMarket" + }, + "best_bid": { + "$ref": "#/components/schemas/BookLevel" + }, + "best_ask": { + "$ref": "#/components/schemas/BookLevel" + }, + "last_execution": { + "$ref": "#/components/schemas/BookLevel" + }, + "last_day": { + "$ref": "#/components/schemas/ExchangeStats" + }, + "today": { + "$ref": "#/components/schemas/ExchangeStats" + }, + "snapshot_at": { + "type": "string", + "format": "date-time", + "description": "The time at which this data was retrieved." + } + } + }, + "TimeInForce": { + "type": "string", + "enum": [ + "GTC", + "FOK", + "IOC", + "GTT" + ], + "description": "How long an order will remain active before it expires.\n- Immediate-or-Cancel (IOC): Cancel if not executed immediately, partial fills allowed.\n- Good-Til-Canceled (GTC): Order can be canceled at any point until executed.\n- Good-Til-Time (GTT): Expires if not executed by a specified time. GTT must be greater than 10 seconds after the order is placed, otherwise the order will be rejected.\n- Fill-or-Kill (FOK): Fill entire order only or cancel entire order, does not allow for partial filling.\n\n**Time in Force validity for Order Types**\n\n| Order type | Immediate or Cancel (IOC) | Good Til Canceled (GTC) | Good Til Time (GTT) | Fill or Kill (FOK) |\n| --------------- | ------------------------- | ----------------------- | ------------------- | ------------------ |\n| Market Order | Default | - | - | - |\n| Limit Order | Valid | Default | Valid | Valid |\n| Post Only Limit | Valid | Default | Valid | Valid |\n| Stop Market | - | Default | Valid | - |\n| Stop Limit | - | Default | Valid | - |" + }, + "TimestampRange": { + "type": "object", + "properties": { + "begin": { + "type": "string", + "format": "date-time", + "description": "Only return records after this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "end": { + "type": "string", + "format": "date-time", + "description": "Only return records before this timestamp, inclusive. RFC3339 format, like `2006-01-02T15:04:05Z`." + } + } + }, + "bufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "DepositAddressConversionTargetAsset": { + "type": "string", + "enum": [ + "NO_CONVERSION", + "USD" + ], + "description": "Asset to credit for deposits of Paxos-minted USD stablecoin." + }, + "FiatAccountOwnerInstitutionDetails": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + }, + "FiatAccountOwnerPersonDetails": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ] + }, + "FiatNetworkInstructionsCbit": { + "type": "object", + "properties": { + "wallet_address": { + "type": "string", + "description": "The wallet address of the CBIT account." + } + }, + "required": [ + "wallet_address" + ] + }, + "FiatNetworkInstructionsCubix": { + "type": "object", + "properties": { + "account_id": { + "type": "string", + "description": "The uuid account id of the CUBIX account." + } + }, + "required": [ + "account_id" + ] + }, + "FiatNetworkInstructionsDbsAct": { + "type": "object", + "properties": { + "account_number": { + "type": "string", + "description": "The account number of the DBS account." + } + }, + "required": [ + "account_number" + ] + }, + "FiatNetworkInstructionsScb": { + "type": "object", + "properties": { + "account_number": { + "type": "string", + "description": "The account number of the StandChart account." + } + }, + "required": [ + "account_number" + ] + }, + "FiatNetworkInstructionsWire": { + "type": "object", + "properties": { + "account_number": { + "type": "string", + "description": "The FiatAccount owner's bank account number." + }, + "fiat_account_owner_address": { + "$ref": "#/components/schemas/MailingAddress" + }, + "routing_details": { + "$ref": "#/components/schemas/FiatNetworkInstructionsWireRoutingDetails" + }, + "intermediary_routing_details": { + "$ref": "#/components/schemas/FiatNetworkInstructionsWireRoutingDetails" + } + }, + "required": [ + "account_number", + "fiat_account_owner_address", + "routing_details" + ] + }, + "FiatNetworkInstructionsWireRoutingDetails": { + "type": "object", + "properties": { + "routing_number_type": { + "$ref": "#/components/schemas/FiatWireAccountType" + }, + "routing_number": { + "type": "string", + "description": "The routing number." + }, + "bank_name": { + "type": "string", + "description": "The name of the bank." + }, + "bank_address": { + "$ref": "#/components/schemas/MailingAddress" + } + }, + "required": [ + "routing_number_type", + "routing_number", + "bank_name", + "bank_address" + ] + }, + "TransferDirection": { + "type": "string", + "enum": [ + "CREDIT", + "DEBIT" + ], + "description": "Direction of the transfer." + }, + "TransferPublicRejectCryptoDepositBody": { + "type": "object", + "example": { + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264" + }, + "properties": { + "identity_id": { + "type": "string", + "description": "The Identity (`identity_id`) of the end user that requests to reject the deposit." + } + }, + "title": "RejectCryptoDepositRequest", + "required": [ + "identity_id" + ] + }, + "TransferPublicUpdateCryptoDepositBody": { + "type": "object", + "example": { + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264", + "originator_address_info": { + "first_name": "John", + "last_name": "Doe" + } + }, + "properties": { + "identity_id": { + "type": "string", + "description": "The Identity (`identity_id`) of the end user updating the deposit." + }, + "originator_address_info": { + "$ref": "#/components/schemas/AddressInfo" + } + }, + "title": "UpdateCryptoDepositRequest", + "required": [ + "identity_id", + "originator_address_info" + ] + }, + "TransferPublicUpdateFiatAccountBody": { + "type": "object", + "properties": { + "fiat_account_owner": { + "$ref": "#/components/schemas/FiatAccountOwner" + }, + "fiat_network_instructions": { + "$ref": "#/components/schemas/UpdateFiatAccountRequestUpdateFiatNetworkInstructions" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + } + }, + "title": "UpdateFiatAccountRequest" + }, + "UpdateFiatAccountRequestUpdateFiatNetworkInstructions": { + "type": "object", + "properties": { + "wire": { + "$ref": "#/components/schemas/UpdateFiatNetworkInstructionsUpdateWire" + } + }, + "title": "FiatNetworkInstructions" + }, + "UpdateFiatNetworkInstructionsUpdateWire": { + "type": "object", + "properties": { + "fiat_account_owner_address": { + "$ref": "#/components/schemas/MailingAddress" + }, + "routing_details": { + "$ref": "#/components/schemas/UpdateWireUpdateRoutingDetails" + }, + "intermediary_routing_details": { + "$ref": "#/components/schemas/UpdateWireUpdateRoutingDetails" + } + }, + "title": "Wire" + }, + "UpdateWireUpdateRoutingDetails": { + "type": "object", + "properties": { + "bank_name": { + "type": "string", + "description": "The name of the bank." + }, + "bank_address": { + "$ref": "#/components/schemas/MailingAddress" + } + }, + "title": "RoutingDetails" + }, + "AddressInfo": { + "type": "object", + "properties": { + "individual_info": { + "$ref": "#/components/schemas/IndividualInfo" + }, + "institution_info": { + "$ref": "#/components/schemas/InstitutionInfo" + } + }, + "required": [ + "originator_info" + ] + }, + "AutoConversion": { + "type": "object", + "properties": { + "from_transfer_id": { + "type": "string", + "title": "Transfer Id of the deposit triggering this transfer (only on withdrawal transfers)" + }, + "to_transfer_id": { + "type": "string", + "title": "Transfer Id of the withdrawal triggered by this deposit(only on deposit transfers)" + } + } + }, + "Beneficiary": { + "type": "object", + "properties": { + "person_details": { + "$ref": "#/components/schemas/BeneficiaryPerson" + }, + "institution_details": { + "$ref": "#/components/schemas/BeneficiaryInstitution" + } + } + }, + "BeneficiaryInstitution": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + }, + "BeneficiaryPerson": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + } + }, + "required": [ + "firstName", + "lastName" + ] + }, + "CreateCryptoWithdrawalFeeRequest": { + "type": "object", + "example": { + "asset": "ETH", + "amount": "0.00005", + "destination_address": "0xF0Aa84466e353E5390be37FE2934301c07c19a55", + "crypto_network": "ETHEREUM" + }, + "properties": { + "asset": { + "type": "string", + "description": "The currency to withdraw." + }, + "destination_address": { + "type": "string", + "description": "The destination address." + }, + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "amount": { + "type": "string", + "description": "The amount to withdraw. Must be greater than `0`.\nSpecify exactly one of `amount` or `total`, otherwise an error is returned.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "total": { + "type": "string", + "description": "Total amount to withdraw, including fees. Must be greater than `0`.\nSpecify exactly one of `total ` or `amount`, otherwise an error is returned.", + "pattern": "^[0-9]*\\.?[0-9]+$" + } + }, + "required": [ + "asset", + "destination_address", + "crypto_network" + ] + }, + "CreateCryptoWithdrawalRequest": { + "type": "object", + "example": { + "ref_id": "idempotence_id", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "asset": "BTC", + "amount": "0.05", + "destination_address": "1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + }, + "crypto_network": "BITCOIN" + }, + "properties": { + "ref_id": { + "type": "string", + "description": "Client-specified ID for replay protection and lookup." + }, + "profile_id": { + "type": "string", + "description": "The profile from which to withdraw." + }, + "identity_id": { + "type": "string", + "description": "The Identity of the user making the withdrawal." + }, + "destination_address": { + "type": "string", + "description": "The destination address." + }, + "asset": { + "type": "string", + "description": "The asset to withdraw, e.g. \"BTC\" , \"ETH\". Always specify the `crypto_network` for all withdrawals." + }, + "balance_asset": { + "type": "string", + "description": "The asset's balance to debit for withdrawals of Paxos-minted USD stablecoin." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + }, + "account_id": { + "type": "string", + "description": "The Account associated to the identity of the user making the withdrawal." + }, + "fee_id": { + "type": "string", + "description": "Optional id of the guaranteed fee." + }, + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "amount": { + "type": "string", + "description": "The amount to withdraw.\nSpecify exactly one of `amount` or `total`, otherwise an error is returned.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "total": { + "type": "string", + "description": "Total amount to withdraw, including fees.\nSpecify exactly one of `amount` or `total`, otherwise an error is returned.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "beneficiary": { + "$ref": "#/components/schemas/Beneficiary" + }, + "memo": { + "type": "string", + "description": "Optional additional memo to be included with the withdrawal as an identifier." + } + }, + "required": [ + "profile_id", + "asset", + "destination_address", + "crypto_network" + ] + }, + "CreateDepositAddressRequest": { + "type": "object", + "example": { + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "crypto_network": "ETHEREUM", + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264", + "ref_id": "deposit_address_0", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + } + }, + "properties": { + "profile_id": { + "type": "string", + "description": "The target profile for deposit crediting." + }, + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "identity_id": { + "type": "string", + "description": "The Identity of the end user who will make deposits to the created address." + }, + "ref_id": { + "type": "string", + "description": "Client-specified ID for replay protection and lookup." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata, which will be added to both the deposit address itself and transfers to the created address.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + }, + "account_id": { + "type": "string", + "description": "The Account associated to the identity of the user that will be linked to the created address." + }, + "conversion_target_asset": { + "$ref": "#/components/schemas/DepositAddressConversionTargetAsset" + } + }, + "required": [ + "profile_id", + "crypto_network" + ] + }, + "CreateFiatAccountRequest": { + "type": "object", + "example": { + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264", + "fiat_network_instructions": { + "wire": { + "account_number": "12345678", + "routing_details": { + "routing_number": "031302971", + "bank_name": "Customers Bank", + "bank_address": { + "country": "USA" + } + }, + "fiat_account_owner_address": { + "address1": "456 Main Street", + "city": "NY", + "country": "USA" + } + } + }, + "fiat_account_owner": { + "person_details": { + "first_name": "Jane", + "last_name": "Doe" + } + } + }, + "properties": { + "ref_id": { + "type": "string", + "description": "The optional client-specified ID (for idempotence)." + }, + "identity_id": { + "type": "string", + "description": "The Paxos Identity (`identity_id`) of the user's FiatAccount.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + }, + "account_id": { + "type": "string", + "description": "The Paxos Account (`account_id`) of the user's FiatAccount.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + }, + "fiat_account_owner": { + "$ref": "#/components/schemas/FiatAccountOwner" + }, + "fiat_network_instructions": { + "$ref": "#/components/schemas/FiatNetworkInstructions" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + } + }, + "required": [ + "fiat_network_instructions", + "fiat_account_owner" + ] + }, + "CreateFiatDepositInstructionsRequest": { + "type": "object", + "properties": { + "ref_id": { + "type": "string", + "description": "The optional client-specified ID (for idempotence)." + }, + "profile_id": { + "type": "string", + "description": "The Profile (`profile_id`) to deposit to." + }, + "identity_id": { + "type": "string", + "description": "The Identity (`identity_id`) of the user making the deposit.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) making deposits on behalf of their end users." + }, + "account_id": { + "type": "string", + "description": "The Account (`account_id`) associated with the Identity of the user making the deposit.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) making deposits on behalf of their end users." + }, + "fiat_network": { + "$ref": "#/components/schemas/FiatNetwork" + }, + "routing_number_type": { + "$ref": "#/components/schemas/FiatWireAccountType" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + } + }, + "required": [ + "profile_id", + "fiat_network" + ] + }, + "CreateFiatWithdrawalRequest": { + "type": "object", + "example": { + "amount": "12.34", + "asset": "USD", + "fiat_account_id": "caa82b32-8abd-4899-afdc-f9d4bf9b4e98", + "profile_id": "5fc6d191-193c-4e28-94fa-656bbdbdfaad", + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264" + }, + "properties": { + "ref_id": { + "type": "string", + "description": "The optional client-specified ID (for idempotence)." + }, + "amount": { + "type": "string", + "description": "Amount to withdraw, excluding fees. Specify exactly one of `amount` or `total`. When `amount` is specified, Paxos initiates the withdrawal for `amount` and then charges fees.", + "pattern": "^[0-9]*\\.?[0-9]{1,2}$" + }, + "asset": { + "type": "string", + "description": "The asset to withdraw. Current supported asset: \"USD\"." + }, + "fiat_account_id": { + "type": "string", + "description": "The fiat account (`fiat_account_id`) destination." + }, + "profile_id": { + "type": "string", + "description": "The Profile (`profile_id`) to withdraw from." + }, + "identity_id": { + "type": "string", + "description": "The Identity (`identity_id`) of the user making the withdrawal.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + }, + "account_id": { + "type": "string", + "description": "The Account (`account_id`) associated with the Identity of the user making the withdrawal.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + }, + "memo": { + "type": "string", + "description": "Optional additional memo to be set on the outgoing withdrawal.\nFor wire withdrawals the character limit is 100.\nFor CUBIX intrabank withdrawals, the character limit is 40.\nFor DBS intrabank withdrawals, the character limit is 100.\nFor SCB intrabank withdrawals, the character limit is 140.", + "maxLength": 500, + "pattern": "^[0-9A-Za-z /?:().,&'+-]*$" + }, + "total": { + "type": "string", + "description": "Total to withdraw, including fees. Specify exactly one of `amount` or `total`. When `total` is specified, Paxos initiates the withdrawal for `total` minus the fee." + } + }, + "required": [ + "asset", + "fiat_account_id", + "profile_id" + ] + }, + "CreateInternalTransferRequest": { + "type": "object", + "example": { + "ref_id": "idempotence_id", + "from_profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "to_profile_id": "37867177-f88c-45cc-b9b5-d786e7079609", + "asset": "BTC", + "amount": "0.05", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + }, + "recipient_metadata": { + "your_id": "43ab8d28-be1e-4729-8731-37fd976b167b" + } + }, + "properties": { + "ref_id": { + "type": "string", + "description": "Client-specified ID for replay protection and lookup." + }, + "from_profile_id": { + "type": "string", + "description": "The profile from which to send funds." + }, + "to_profile_id": { + "type": "string", + "description": "The destination profile." + }, + "amount": { + "type": "string", + "description": "The amount to transfer.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "asset": { + "type": "string", + "description": "The asset to transfer, e.g. \"USD\", \"BTC\", \"ETH\"." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata for the sender side of the transaction.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + }, + "from_identity_id": { + "type": "string", + "description": "The Paxos Identity (`identity_id`) of the sending user." + }, + "from_account_id": { + "type": "string", + "description": "The Paxos Account (`account_id`) of the sending user.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + }, + "to_identity_id": { + "type": "string", + "description": "The Paxos Identity (`identity_id`) of the destination user." + }, + "to_account_id": { + "type": "string", + "description": "The Paxos Account (`account_id`) of the destination user.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + }, + "recipient_metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata for the recipient side of the transaction.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + } + }, + "required": [ + "from_profile_id", + "to_profile_id", + "amount", + "asset" + ] + }, + "CreatePaxosTransferRequest": { + "type": "object", + "example": { + "ref_id": "idempotence_id", + "from_profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "to_profile_id": "37867177-f88c-45cc-b9b5-d786e7079609", + "asset": "BTC", + "amount": "0.05", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + }, + "recipient_metadata": { + "your_id": "43ab8d28-be1e-4729-8731-37fd976b167b" + } + }, + "properties": { + "ref_id": { + "type": "string", + "description": "Client-specified ID for replay protection and lookup." + }, + "from_profile_id": { + "type": "string", + "description": "The profile from which to send funds." + }, + "to_profile_id": { + "type": "string", + "description": "The destination profile." + }, + "amount": { + "type": "string", + "description": "The amount to transfer." + }, + "asset": { + "type": "string", + "description": "The asset to transfer, e.g. \"USD\", \"BTC\", \"ETH\"." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata on the sender side of the transaction.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + }, + "recipient_metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata for the recipient side of the transaction.\nUp to 6 key/value pairs may be provided.\nEach key and value must be less than or equal to 100 characters." + }, + "from_identity_id": { + "type": "string", + "description": "The Paxos Identity (`identity_id`) of the sending user." + }, + "from_account_id": { + "type": "string", + "description": "The Paxos Account (`account_id`) of the sending user.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + }, + "to_identity_id": { + "type": "string", + "description": "The Paxos Identity (`identity_id`) of the destination user." + }, + "to_account_id": { + "type": "string", + "description": "The Paxos Account (`account_id`) of the destination user.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + } + }, + "required": [ + "from_profile_id", + "to_profile_id", + "amount", + "asset" + ] + }, + "CryptoWithdrawalFee": { + "type": "object", + "example": { + "id": "34bd61ed-cf0a-4012-8be4-d347667b6154", + "fee": "0.00005", + "asset": "ETH", + "amount": "0.001", + "expires_at": "2021-02-10T23:00:00Z", + "destination_address": "0xF0Aa84466e353E5390be37FE2934301c07c19a55", + "crypto_network": "ETHEREUM" + }, + "properties": { + "id": { + "type": "string", + "description": "The id of the guaranteed fee." + }, + "fee": { + "type": "string", + "description": "The guaranteed fee value, in the same currency.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "asset": { + "type": "string", + "description": "The currency to withdraw." + }, + "expires_at": { + "type": "string", + "format": "date-time", + "description": "The expiration timestamp of the created fee." + }, + "destination_address": { + "type": "string", + "description": "The destination address." + }, + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "amount": { + "type": "string", + "description": "The quoted amount to withdraw for which the fee is valid.\nSpecify exactly one of `amount` or `total`, otherwise an error is returned.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "total": { + "type": "string", + "description": "Total amount to withdraw, including fees.\nSpecify exactly one of `amount` or `total`, otherwise an error is returned.", + "pattern": "^[0-9]*\\.?[0-9]+$" + } + }, + "required": [ + "id", + "fee", + "asset", + "expires_at", + "destination_address", + "crypto_network" + ] + }, + "DeleteFiatAccountResponse": { + "type": "object" + }, + "DepositAddress": { + "type": "object", + "example": { + "id": "34bd61ed-cf0a-4012-8be4-d347667b6154", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264", + "ref_id": "deposit_address_0", + "crypto_network": "ETHEREUM", + "address": "0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7", + "conversion_target_asset": "USD", + "compatible_crypto_networks": [ + "ETHEREUM" + ], + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + }, + "created_at": "2020-01-17T18:36:08.737Z" + }, + "properties": { + "id": { + "type": "string", + "description": "The UUID of the deposit address." + }, + "profile_id": { + "type": "string", + "description": "The ID of the profile that will be credited when a deposit arrives with this address." + }, + "customer_id": { + "type": "string", + "description": "The Paxos Customer to which the profile belongs." + }, + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "identity_id": { + "type": "string", + "description": "The Identity of the end user who will make deposits to this address." + }, + "ref_id": { + "type": "string", + "description": "Client-specified ID for replay protection and lookup." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata, which is set on deposit address creation.\nUp to 6 key/value pairs may be returned.\nEach key and value must be less than or equal to 100 characters." + }, + "address": { + "type": "string", + "description": "The crypto address to send to for deposits." + }, + "account_id": { + "type": "string", + "description": "The Account associated to the identity of the user that will be linked to the created address." + }, + "conversion_target_asset": { + "$ref": "#/components/schemas/DepositAddressConversionTargetAsset" + }, + "compatible_crypto_networks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "description": "List of networks compatible with the created address. Any of these networks can be used to deposit to the address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which this address was created." + } + }, + "required": [ + "id", + "profile_id", + "customer_id", + "crypto_network", + "address", + "conversion_target_asset", + "created_at" + ] + }, + "FiatAccount": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The Paxos FiatAccount ID (UUID)." + }, + "ref_id": { + "type": "string", + "description": "The optional client-specified ID (for idempotence)." + }, + "identity_id": { + "type": "string", + "description": "The Paxos Identity (`identity_id`) of the user's FiatAccount." + }, + "account_id": { + "type": "string", + "description": "The Paxos Account (`account_id`) of the user's FiatAccount.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users." + }, + "fiat_account_owner": { + "$ref": "#/components/schemas/FiatAccountOwner" + }, + "fiat_network_instructions": { + "$ref": "#/components/schemas/FiatNetworkInstructions" + }, + "status": { + "$ref": "#/components/schemas/FiatAccountStatus" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata.\nUp to 6 key/value pairs may be returned.\nEach key and value must be less than or equal to 100 characters." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which this FiatAccount was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "The time at which this FiatAccount record was most recently updated." + } + }, + "required": [ + "id", + "status", + "fiat_network_instructions", + "created_at" + ] + }, + "FiatAccountOwner": { + "type": "object", + "properties": { + "person_details": { + "$ref": "#/components/schemas/FiatAccountOwnerPersonDetails" + }, + "institution_details": { + "$ref": "#/components/schemas/FiatAccountOwnerInstitutionDetails" + } + } + }, + "FiatAccountStatus": { + "type": "string", + "enum": [ + "PENDING", + "APPROVED", + "REJECTED" + ] + }, + "FiatDepositInstructions": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The Fiat Deposit Instructions ID (`id`) is provided in the response of the [Create Fiat Deposit Instructions](#operation/CreateFiatDepositInstructions).\nUse this ID to retrieve the instructions using [Get Fiat Deposit Instructions](#operation/GetFiatDepositInstructions) & [List Fiat Deposit Instructions](#operation/ListFiatDepositInstructions)." + }, + "profile_id": { + "type": "string", + "description": "The Profile (`profile_id`) to deposit to." + }, + "identity_id": { + "type": "string", + "description": "The Identity (`identity_id`) of the user making the deposit." + }, + "account_id": { + "type": "string", + "description": "The Account (`account_id`) associated with the Identity of the user making the deposit.\nRequired only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) making deposits on behalf of their end users." + }, + "ref_id": { + "type": "string", + "description": "The optional client-specified ID (for idempotence)." + }, + "status": { + "$ref": "#/components/schemas/FiatDepositInstructionsStatus" + }, + "memo_id": { + "type": "string", + "description": "The string, unique to the request.\nTo deposit funds into an account, the memo ID must be provided when initiating a `WIRE` transfer to Paxos.\nThis is provided after creating [Fiat Deposit Instructions](#/operation/CreateFiatDepositInstructions)\nThe `memo_id` can also be found from either [Get Fiat Deposit Instructions](#operation/GetFiatDepositInstructions) or [List Fiat Deposit Instructions](#operation/ListFiatDepositInstructions) for the corresponding ID (Fiat Deposit Instructions ID)." + }, + "fiat_network_instructions": { + "$ref": "#/components/schemas/FiatNetworkInstructions" + }, + "fiat_account_owner": { + "$ref": "#/components/schemas/FiatAccountOwner" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified metadata." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which these instructions were created." + } + }, + "required": [ + "id", + "profile_id", + "identity_id", + "status", + "memo_id", + "fiat_network_instructions", + "created_at" + ] + }, + "FiatDepositInstructionsStatus": { + "type": "string", + "enum": [ + "VALID", + "DEPRECATED" + ] + }, + "FiatNetwork": { + "type": "string", + "enum": [ + "WIRE", + "DBS_ACT", + "CUBIX", + "SCB" + ] + }, + "FiatNetworkInstructions": { + "type": "object", + "properties": { + "wire": { + "$ref": "#/components/schemas/FiatNetworkInstructionsWire" + }, + "cbit": { + "$ref": "#/components/schemas/FiatNetworkInstructionsCbit" + }, + "dbs_act": { + "$ref": "#/components/schemas/FiatNetworkInstructionsDbsAct" + }, + "cubix": { + "$ref": "#/components/schemas/FiatNetworkInstructionsCubix" + }, + "scb": { + "$ref": "#/components/schemas/FiatNetworkInstructionsScb" + } + } + }, + "FiatWireAccountType": { + "type": "string", + "enum": [ + "ABA", + "SWIFT" + ] + }, + "IndividualInfo": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ] + }, + "InitiateSandboxFiatDepositRequest": { + "type": "object", + "properties": { + "amount": { + "type": "string", + "description": "The amount to deposit.", + "pattern": "^[0-9]*\\.?[0-9]{1,2}$" + }, + "asset": { + "type": "string", + "description": "The asset to deposit. Current supported asset: \"USD\"." + }, + "memo_id": { + "type": "string", + "description": "The string that the client must provide in the memo field on their deposit to credit their Paxos platform balance." + }, + "fiat_network_instructions": { + "$ref": "#/components/schemas/FiatNetworkInstructions" + }, + "fiat_account_owner": { + "$ref": "#/components/schemas/FiatAccountOwner" + } + }, + "required": [ + "amount", + "asset", + "memo_id", + "fiat_network_instructions" + ] + }, + "InitiateSandboxFiatDepositResponse": { + "type": "object" + }, + "InstitutionInfo": { + "type": "object", + "properties": { + "institution_name": { + "type": "string" + } + }, + "required": [ + "institution_name" + ] + }, + "ListDepositAddressesRequestOrderBy": { + "type": "string", + "enum": [ + "CREATED_AT" + ], + "description": "Query filter order." + }, + "ListDepositAddressesResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DepositAddress" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "ListFiatAccountsRequestOrderBy": { + "type": "string", + "enum": [ + "CREATED_AT" + ], + "description": "Query filter order." + }, + "ListFiatAccountsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FiatAccount" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "ListFiatDepositInstructionsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FiatDepositInstructions" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "ListTransferLimitsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TransferLimit" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "ListTransfersRequestOrderBy": { + "type": "string", + "enum": [ + "CREATED_AT", + "UPDATED_AT" + ], + "description": "Query filter order." + }, + "ListTransfersResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Transfer" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "MailingAddress": { + "type": "object", + "properties": { + "country": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "address1": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "address2": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "city": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "province": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + }, + "zip_code": { + "type": "string", + "maxLength": 35, + "pattern": "^[0-9A-Za-z /?:().,&'+-]+$" + } + }, + "description": "A mailing address.", + "required": [ + "country" + ] + }, + "RejectCryptoDepositResponse": { + "type": "object" + }, + "SecondaryStatus": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/SecondaryStatusName" + }, + "detail": { + "type": "string", + "description": "Additional information about the current status of the transfer (e.g. if information is missing)." + } + }, + "description": "Secondary status for the transfer, used for more granular explanation of the transfer status." + }, + "SecondaryStatusName": { + "type": "string", + "enum": [ + "TRAVEL_RULE_INFO_REQUESTED", + "TRAVEL_RULE_REJECTED" + ], + "description": "Identifier for secondary status.\n\n - TRAVEL_RULE_INFO_REQUESTED: Travel rule information is required to continue processing the transfer.\n - TRAVEL_RULE_REJECTED: Transfer has been terminally rejected due to failing travel rule checks." + }, + "Transfer": { + "type": "object", + "example": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "ref_id": "idempotence_id", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "amount": "0.10000000", + "total": "0.10000023", + "fee": "0.00000023", + "asset": "BTC", + "balance_asset": "BTC", + "direction": "WITHDRAWAL", + "type": "CRYPTO_WITHDRAWAL", + "status": "COMPLETED", + "created_at": "2020-01-17T18:36:08.737Z", + "updated_at": "2020-01-17T18:37:08.737Z", + "crypto_network": "BITCOIN", + "crypto_tx_hash": "f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16", + "crypto_tx_index": "0", + "destination_address": "1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2", + "notional_value": "1.02", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + } + }, + "properties": { + "id": { + "type": "string", + "description": "The Paxos transfer ID." + }, + "customer_id": { + "type": "string", + "description": "The Paxos customer ID." + }, + "profile_id": { + "type": "string", + "description": "The target Profile of the transfer. The profile asset balance is debited or credited by the transfer." + }, + "identity_id": { + "type": "string", + "description": "The Paxos ID of the Identity associated with the transfer." + }, + "ref_id": { + "type": "string", + "description": "The optional client-specified ID for replay protection and lookup." + }, + "amount": { + "type": "string", + "description": "The amount sent in the transfer.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "total": { + "type": "string", + "description": "The balance change from this transfer: amount - fee for deposits, and amount + fee for withdrawals. Unsigned.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "fee": { + "type": "string", + "description": "The fee paid for the transfer.", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "asset": { + "type": "string", + "description": "The asset for this transfer. This profile's balance of this asset will be debited or credited." + }, + "balance_asset": { + "type": "string", + "description": "The balance_asset represents what asset's balance was affected at Paxos with this transfer. It only differs from Asset when the transfer includes conversion." + }, + "direction": { + "$ref": "#/components/schemas/TransferDirection" + }, + "type": { + "$ref": "#/components/schemas/TransferType" + }, + "status": { + "$ref": "#/components/schemas/TransferStatus" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which this transfer record was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "The time at which this transfer record was most recently updated." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified stored metadata. For deposit event transfers\nthis metadata is copied from the crypto deposit address or fiat deposit\nmemo used for attribution.\nUp to 6 key/value pairs may be returned.\nEach key and value must be less than or equal to 100 characters." + }, + "destination_address": { + "type": "string", + "description": "The destination crypto address." + }, + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "crypto_tx_hash": { + "type": "string", + "description": "For crypto transactions, the on-chain transaction hash." + }, + "crypto_tx_index": { + "type": "string", + "description": "For crypto transactions, the output index or output address." + }, + "account_id": { + "type": "string", + "description": "The Paxos ID of the Account associated with the transfer." + }, + "auto_conversion": { + "$ref": "#/components/schemas/AutoConversion" + }, + "group_id": { + "type": "string", + "description": "Unique identifier linking the debit and credit sides of an internal or Paxos transfer." + }, + "fiat_account_id": { + "type": "string", + "description": "For fiat withdrawals, the Paxos ID of the owner's fiat account (UUID)." + }, + "secondary_status": { + "$ref": "#/components/schemas/SecondaryStatus" + }, + "notional_value": { + "type": "string", + "description": "For crypto withdrawals and deposits, the USD value of the combined amount and fee at the time of the transfer." + }, + "memo": { + "type": "string", + "description": "An optional memo to be included with the transfer as an identifier." + }, + "status_details": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "description": "Example:\n{\n \"max_rent_exceeded\": {\n \"message\": \"Transfer cancelled due to suspected system abuse\",\n \"destination_address\": \"7Vbsn3YqXb7kDFvEHCWZRh5osSQXzjYkeFnRhh2Mz5vT\"\n }\n}\n\nSupported error types:\n- \"max_rent_exceeded\": Transfer cancelled due to suspected system abuse", + "title": "Structured details about the current status.\nEach key represents a status type (e.g., \"max_rent_exceeded\") and maps to status metadata:\n- \"message\": The error message string\n- Additional metadata fields specific to the status type" + } + }, + "required": [ + "id", + "customer_id", + "profile_id", + "amount", + "total", + "fee", + "created_at", + "updated_at", + "asset", + "status", + "direction", + "type" + ] + }, + "TransferLimit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the limit. Single-transaction limits will not have an id, but only a rule id." + }, + "rule_id": { + "type": "string", + "description": "The limit rule this limit applies to." + }, + "transfer_types": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TransferType" + }, + "description": "One or more transfer types that the limit applies to, ordered alphabetically." + }, + "period_seconds": { + "type": "string", + "description": "The number of seconds that the limit is measured over. Single-transaction limits have period 0." + }, + "limit": { + "type": "string", + "description": "The limit." + }, + "remaining": { + "type": "string", + "description": "The limit, minus any transactions that have been done in the period. Single-transaction limits always have remaining set to the limit." + }, + "limit_asset": { + "type": "string", + "description": "The asset that limit and remaining are given in, e.g. \"USD\", \"BTC\", \"ETH\"." + } + } + }, + "TransferStatus": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ] + }, + "TransferType": { + "type": "string", + "enum": [ + "INTERNAL_TRANSFER_DEBIT", + "INTERNAL_TRANSFER_CREDIT", + "CRYPTO_DEPOSIT", + "CRYPTO_WITHDRAWAL", + "WIRE_DEPOSIT", + "WIRE_WITHDRAWAL", + "SEN_DEPOSIT", + "SEN_WITHDRAWAL", + "BANK_DEPOSIT", + "BANK_WITHDRAWAL", + "PAXOS_TRANSFER_DEBIT", + "PAXOS_TRANSFER_CREDIT", + "SIGNET_DEPOSIT", + "SIGNET_WITHDRAWAL", + "CBIT_WITHDRAWAL", + "CBIT_DEPOSIT", + "CUBIX_DEPOSIT", + "CUBIX_WITHDRAWAL" + ], + "description": "Type of transfer." + }, + "UpdateCryptoDepositResponse": { + "type": "object" + }, + "bufNullValue": { + "type": "string", + "enum": [ + "NULL_VALUE" + ], + "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\nThe JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." + }, + "ListTaxFormRevisionsResponse": { + "type": "object", + "properties": { + "tax_form_urls": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaxFormURL" + }, + "title": "List of tax form urls" + } + } + }, + "ListTaxFormsResponse": { + "type": "object", + "properties": { + "tax_form_urls": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaxFormURL" + }, + "description": "List of tax form URLs. The size shall not exceed `users_limit` times `form_types`." + } + } + }, + "TaxFormType": { + "type": "string", + "enum": [ + "FORM_1099_B", + "FORM_1099_MISC" + ] + }, + "TaxFormURL": { + "type": "object", + "properties": { + "account_id": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/TaxFormType" + }, + "tax_year": { + "type": "string" + }, + "revision": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "CreateStablecoinConversionRequest": { + "type": "object", + "properties": { + "profile_id": { + "type": "string", + "description": "The Profile associated with a conversion." + }, + "amount": { + "type": "string", + "description": "Asset amount to convert. [Details](https://docs.paxos.com/developer/convert#assets).", + "pattern": "^[0-9]*\\.?[0-9]+$" + }, + "source_asset": { + "type": "string", + "description": "The asset to convert from. [Details](https://docs.paxos.com/developer/convert#assets)." + }, + "target_asset": { + "type": "string", + "description": "The asset to convert to. [Details](https://docs.paxos.com/developer/convert#assets)." + }, + "ref_id": { + "type": "string", + "description": "Client provided, unique Reference ID for lookup and replay protection." + }, + "identity_id": { + "type": "string", + "description": "The Identity ID associated with the user requesting the conversion.\nRequired only for customers with [3rd-Party integrations](/crypto-brokerage/ledger-type#fiat-and-crypto-subledger)." + }, + "account_id": { + "type": "string", + "description": "The Account ID associated with the user requesting the conversion.\nRequired only for customers with [3rd-Party integrations](/crypto-brokerage/ledger-type#fiat-and-crypto-subledger)." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified stored metadata." + }, + "recipient_profile_id": { + "type": "string", + "description": "For directed settlement, the receiving side `profile_id`." + } + }, + "required": [ + "profile_id", + "amount", + "source_asset", + "target_asset" + ] + }, + "ListStablecoinConversionsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StablecoinConversion" + } + }, + "next_page_cursor": { + "type": "string", + "description": "Cursor token required for fetching the next page." + } + } + }, + "StablecoinConversion": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System provided UUID for the conversion is\nprovided in the [Create Stablecoin Conversion](#operation/CreateStablecoinConversion) response.\n\nRequired parameter for the\n[Get Stablecoin Conversion](#operation/GetStablecoinConversion) request." + }, + "profile_id": { + "type": "string", + "description": "The Profile associated with a conversion. Required in the\n[Create Stablecoin Conversion](#operation/CreateStablecoinConversion) request." + }, + "amount": { + "type": "string", + "description": "Asset amount to convert. [Details](https://docs.paxos.com/developer/convert#assets)." + }, + "source_asset": { + "type": "string", + "description": "The asset to convert from. [Details](https://docs.paxos.com/developer/convert#assets)." + }, + "target_asset": { + "type": "string", + "description": "The asset to convert to. [Details](https://docs.paxos.com/developer/convert#assets)." + }, + "status": { + "type": "string", + "description": "The current status of the conversion. [Details](https://docs.paxos.com/developer/convert#stablecoin-conversion-statuses)." + }, + "ref_id": { + "type": "string", + "description": "Client provided, unique Reference ID included the\n[Create Stablecoin Conversion](#operation/CreateStablecoinConversion) request." + }, + "identity_id": { + "type": "string", + "description": "The Identity ID associated with the user requesting the conversion.\nRequired only for customers with [3rd-Party integrations](/crypto-brokerage/ledger-type#fiat-and-crypto-subledger)." + }, + "account_id": { + "type": "string", + "description": "The Account ID associated with the user requesting the conversion.\nRequired only for customers with [3rd-Party integrations](/crypto-brokerage/ledger-type#fiat-and-crypto-subledger)." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the conversion was requested.\nSee RFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the conversion was last updated.\nRFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "settled_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the conversion was settled.\n[Details](https://docs.paxos.com/developer/convert#stablecoin-conversion-statuses).\nRFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "description": "The time at which the conversion has been cancelled.\n[Details](https://docs.paxos.com/developer/convert#stablecoin-conversion-statuses).\nRFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional client-specified stored metadata." + }, + "recipient_profile_id": { + "type": "string", + "description": "For directed settlement, the receiving side `profile_id`." + } + } + }, + "CreateObligationRequest": { + "type": "object", + "properties": { + "direction": { + "$ref": "#/components/schemas/ObligationDirection" + }, + "asset": { + "type": "string", + "description": "Asset which is obliged." + }, + "amount": { + "type": "string", + "description": "Amount of the asset which is obliged." + } + }, + "description": "Request to create a obligation." + }, + "CreateTransactionRequest": { + "type": "object", + "properties": { + "ref_id": { + "type": "string", + "description": "Idempotency key." + }, + "settlement_window_start": { + "type": "string", + "format": "date-time", + "description": "The start of the window which the transaction is eligible for settlement.\nIf omitted, transactions are immediately eligible for settlement upon success.\nRFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "settlement_window_end": { + "type": "string", + "format": "date-time", + "description": "The end of the window which the transaction is eligible for settlement.\nTransactions which are not cancelled or settled by this time will expire.\nRFC3339 format, like `2006-01-02T15:04:05Z`." + }, + "source_profile_id": { + "type": "string", + "description": "The `profile_id` of the entity submitting the transaction." + }, + "target_profile_id": { + "type": "string", + "description": "The `profile_id` of the entity receiving the transaction." + }, + "legs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreateObligationRequest" + }, + "description": "The obligations (representing one-way asset movements) to be settled atomically." + } + }, + "description": "Request to create a bilateral settlement transaction with one or more legs." + }, + "ListTransactionsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Transaction" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "Obligation": { + "type": "object", + "example": { + "id": "e7b6892a-00f7-40fb-8871-bdd1eefb6192", + "direction": "DELIVER", + "asset": "BTC", + "amount": "0.10000000" + }, + "properties": { + "id": { + "type": "string" + }, + "direction": { + "$ref": "#/components/schemas/ObligationDirection" + }, + "asset": { + "type": "string", + "description": "Asset which is obliged." + }, + "amount": { + "type": "string", + "description": "Amount of the asset which is obliged.", + "pattern": "^[0-9]*\\.?[0-9]+$" + } + }, + "required": [ + "id", + "direction", + "asset", + "amount" + ] + }, + "ObligationDirection": { + "type": "string", + "enum": [ + "DELIVER", + "RECEIVE" + ], + "description": "Direction of asset delivery for an obligation.\n\n - DELIVER: Assets are delivered from the source profile to the target profile.\n - RECEIVE: Assets are delivered from the target profile to the source profile." + }, + "Transaction": { + "type": "object", + "example": { + "id": "d99a03ee-6b88-4362-89da-087c2c8cd4a7", + "ref_id": "d840cf31-352f-4190-a476-7522bf3eafda", + "settlement_window_start": "2023-08-25T14:25:41.648486573Z", + "settlement_window_end": "2023-08-25T14:25:41.648486953Z", + "source_profile_id": "4fd025ab-f29f-47e6-a02e-df90a61c7ec9", + "target_profile_id": "47db6271-50d6-4934-8c81-c42d87bfb390", + "legs": [ + { + "id": "ace21517-447e-4764-8733-765cb12a7fab", + "direction": "DELIVER", + "asset": "BTC", + "amount": "100" + } + ], + "status": "PENDING", + "created_at": "2023-08-25T14:25:41.648489333Z", + "updated_at": "2023-08-25T14:25:41.648489493Z" + }, + "properties": { + "id": { + "type": "string", + "description": "The transaction identifier used to query or refer to a specific transaction." + }, + "ref_id": { + "type": "string", + "description": "Idempotency key." + }, + "settlement_window_start": { + "type": "string", + "format": "date-time", + "description": "The start of the window which the transaction is eligible for settlement.\nIf omitted, transactions are immediately eligible for settlement upon success.\nRFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`. ex: `2006-01-02T15:04:05Z`." + }, + "settlement_window_end": { + "type": "string", + "format": "date-time", + "description": "The end of the window which the transaction is eligible for settlement.\nTransactions which are not cancelled or settled by this time will expire.\nRFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`. ex: `2006-01-02T15:04:05Z`." + }, + "source_profile_id": { + "type": "string", + "description": "The Profile ID (profile_id) of the entity submitting the transaction." + }, + "target_profile_id": { + "type": "string", + "description": "The Profile ID (profile_id) of the entity receiving the transaction." + }, + "legs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Obligation" + }, + "description": "The obligations (representing one-way asset movements) to be settled atomically." + }, + "status": { + "$ref": "#/components/schemas/TransactionStatus" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The timestamp when the transaction was first created, RFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "The timestamp when the transaction was last updated, RFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`." + } + }, + "description": "Transaction returned on create (Create Transaction), list (List Transactions) and get (Get Transaction) requests.", + "required": [ + "id", + "ref_id", + "settlement_window_start", + "settlement_window_end", + "source_profile_id", + "target_profile_id", + "legs", + "status", + "created_at", + "updated_at" + ] + }, + "TransactionStatus": { + "type": "string", + "enum": [ + "PENDING", + "SETTLED", + "EXPIRED", + "CANCELLED", + "AFFIRMED" + ], + "description": "- PENDING: Initial state of a settlement transaction upon creation.\n - SETTLED: Indicates all obligations belong to the settlement transaction have been enacted.\n - EXPIRED: Indicates the settlement transaction is no longer eligible for settlement.\n - CANCELLED: Indicates the settlement transaction was cancelled by the source profile.\n - AFFIRMED: Indicates the settlement transaction will be eligible for settlement once within the window.", + "title": "Status of the transaction" + }, + "AutoRewardsPublicUpdateMonitoringAddressBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Optional display name. Useful for grouping or reporting." + } + } + }, + "CreateMonitoringAddressRequest": { + "type": "object", + "properties": { + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "address": { + "type": "string", + "title": "On-chain address Paxos will monitor for eligible reward activity. Must be valid for the specified network.\nNote: We only accept wallet addresses for Solana. Derived addresses (i.e. ATA’s) are not yet supported" + }, + "name": { + "type": "string", + "description": "Optional display name. Useful for grouping or reporting." + } + } + }, + "CreateMonitoringAddressResponse": { + "type": "object", + "properties": { + "address": { + "$ref": "#/components/schemas/MonitoringAddress" + } + } + }, + "DeleteMonitoringAddressResponse": { + "type": "object", + "properties": { + "address": { + "$ref": "#/components/schemas/MonitoringAddress" + } + } + }, + "GetMonitoringAddressResponse": { + "type": "object", + "properties": { + "address": { + "$ref": "#/components/schemas/MonitoringAddress" + } + } + }, + "GetRewardAccessResponse": { + "type": "object", + "properties": { + "is_gdn_partner": { + "type": "boolean", + "title": "Indicate the caller is part of the Global Network" + } + } + }, + "ListMonitoringAddressResponse": { + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MonitoringAddress" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "MonitoringAddress": { + "type": "object", + "properties": { + "address": { + "type": "string", + "title": "On-chain address Paxos will monitor for eligible reward activity. Must be valid for the specified network.\nNote: We only accept wallet addresses for Solana. Derived addresses (i.e. ATA’s) are not yet supported" + }, + "crypto_network": { + "$ref": "#/components/schemas/CryptoNetwork" + }, + "name": { + "type": "string", + "description": "Optional display name. Useful for grouping or reporting." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "When the address was registered." + }, + "id": { + "type": "string", + "description": "UUID for internal reference." + } + }, + "required": [ + "id", + "address", + "crypto_network", + "created_at" + ] + }, + "UpdateMonitoringAddressResponse": { + "type": "object", + "properties": { + "address": { + "$ref": "#/components/schemas/MonitoringAddress" + } + } + }, + "ListPaymentsResponse": { + "type": "object", + "properties": { + "payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Payment" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "ListStatementsResponse": { + "type": "object", + "properties": { + "statements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Statement" + } + }, + "next_page_cursor": { + "type": "string" + } + } + }, + "Payment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the payment." + }, + "customer_id": { + "type": "string", + "description": "UUID of the customer." + }, + "profile_id": { + "type": "string", + "title": "Optional, can be specified if payment is at profile level" + }, + "account_id": { + "type": "string", + "title": "Optional, can be specified if payment is at account level" + }, + "ref_id": { + "type": "string", + "description": "Statement reference string this payment resolves." + }, + "product": { + "$ref": "#/components/schemas/Product" + }, + "payment_type": { + "$ref": "#/components/schemas/PaymentType" + }, + "payment_source": { + "type": "string", + "title": "Payment source does not have information for USDG reward payments" + }, + "payment_destination": { + "type": "string", + "description": "UUID of the payout address used." + }, + "payment_asset": { + "type": "string", + "description": "Should be `USDG`." + }, + "payment_amount": { + "type": "string", + "description": "Total amount paid." + }, + "payment_status": { + "$ref": "#/components/schemas/PaymentStatus" + }, + "payment_tx_id": { + "type": "string", + "description": "The transaction id returned by the internal service which processes the payment requested." + }, + "description": { + "type": "string", + "title": "Description of the payment, will show in the payment dashboard (TBD)" + }, + "metadata": { + "type": "string", + "description": "Metadata associated with the payment, for client usage or future expansion." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Lifecycle field for tracking transfer status." + }, + "processed_at": { + "type": "string", + "format": "date-time", + "description": "Lifecycle field for tracking transfer status." + } + } + }, + "PaymentStatus": { + "type": "string", + "enum": [ + "PAYMENT_STATUS_PENDING", + "PAYMENT_STATUS_COMPLETED", + "PAYMENT_STATUS_FAILED" + ] + }, + "PaymentType": { + "type": "string", + "enum": [ + "PAYMENT_TYPE_CRYPTO_WITHDRAWAL" + ], + "title": "Payment types supported by payment service\nCrypto Withdrawal: Withdrawal of crypto assets" + }, + "Product": { + "type": "string", + "enum": [ + "USDG_REWARDS" + ] + }, + "Statement": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique statement ID." + }, + "ref_id": { + "type": "string", + "description": "Must be unique per customer." + }, + "customer_id": { + "type": "string", + "description": "UUID of the associated customer." + }, + "type": { + "$ref": "#/components/schemas/StatementType" + }, + "product": { + "$ref": "#/components/schemas/Product" + }, + "status": { + "$ref": "#/components/schemas/StatementStatus" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom fields (e.g., `total_amount`)." + }, + "statement_balances": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StatementBalance" + }, + "description": "Breakdown of owed vs. paid balances." + }, + "period_start": { + "type": "string", + "format": "date-time", + "description": "The time range this statement covers." + }, + "period_end": { + "type": "string", + "format": "date-time", + "description": "The time range this statement covers." + }, + "generated_at": { + "type": "string", + "format": "date-time", + "description": "Lifecycle tracking fields." + }, + "paid_at": { + "type": "string", + "format": "date-time", + "description": "Lifecycle tracking fields." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Lifecycle tracking fields." + }, + "statement_group_id": { + "type": "string", + "description": "statement_group_id is used to group multiple statements together. Multiple versions of a statement may belong to a single statement group." + }, + "version": { + "type": "integer", + "format": "int64", + "description": "Version number of the statement." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StatementFile" + }, + "title": "Generated files for the statement" + }, + "data": { + "$ref": "#/components/schemas/bufAny" + } + } + }, + "StatementBalance": { + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "amount_paid": { + "type": "string" + }, + "total_amount_owed": { + "type": "string" + }, + "next_payment_ref_id": { + "type": "string", + "description": "next_payment_ref_id should be used by clients as the ref_id when processing payments for statements.\nThis is unique to for each payment that should be submitted. If the amount_paid == total_amount_owed, then this field will be empty." + } + } + }, + "StatementFile": { + "type": "object", + "properties": { + "format": { + "type": "string", + "title": "The format type (e.g., \"PDF\" or \"CSV\")" + }, + "url": { + "type": "string", + "title": "The S3 presigned URL for the file" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "title": "When the S3 presigned URL expires" + }, + "generated_at": { + "type": "string", + "format": "date-time", + "title": "Timestamp when this specific file was generated" + } + }, + "description": "Represents a generated file for a specific statement version." + }, + "StatementStatus": { + "type": "string", + "enum": [ + "STATEMENT_STATUS_UNSPECIFIED", + "STATEMENT_STATUS_INITIATED", + "STATEMENT_STATUS_GENERATED", + "STATEMENT_STATUS_PAID" + ] + }, + "StatementType": { + "type": "string", + "enum": [ + "STATEMENT_TYPE_UNSPECIFIED", + "STATEMENT_TYPE_USDG_REWARD" + ] + }, + "Event": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "The event identifier used to query or refer to a specific event" + }, + "type": { + "type": "string", + "title": "The type of event representing an action in the system" + }, + "object_type": { + "type": "string", + "title": "The type of the `object` associated with the event" + }, + "object": { + "type": "object", + "title": "The structured payload of type `object_type` associated with the event" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "The timestamp when the event was first created, RFC3339 format, like `YYYY-MM-DDTHH:MM:SS.sssZ`." + }, + "undelivered_webhooks": { + "type": "integer", + "format": "int32", + "title": "The number of undelivered webhooks" + } + } + }, + "ListEventsResponse": { + "type": "object", + "properties": { + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Event" + }, + "description": "Events in ascending order of `created_at` timestamp." + } + } + }, + "ListApiCredentialsRequestOrderBy": { + "type": "string", + "enum": [ + "CREATED_AT" + ] + }, + "ClientPublicKey": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "client_id": { + "type": "string" + }, + "algorithm": { + "type": "string" + }, + "public_key": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "nickname": { + "type": "string" + } + }, + "required": [ + "nickname", + "algorithm", + "public_key" + ] + }, + "DeleteApiCredentialsResponse": { + "type": "object" + }, + "FirstPartyClient": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "customer_id": { + "type": "string" + }, + "client_id": { + "type": "string" + }, + "client_public_keys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ClientPublicKey" + } + }, + "status": { + "$ref": "#/components/schemas/FirstPartyClientStatus" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "nickname": { + "type": "string" + }, + "ip_allowlist": { + "type": "array", + "items": { + "type": "string" + } + }, + "enforce_request_signing": { + "type": "boolean" + }, + "client_scopes": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "FirstPartyClientStatus": { + "type": "string", + "enum": [ + "APPROVED", + "DISABLED" + ] + }, + "ListApiCredentialsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FirstPartyClient" + } + }, + "next_page_cursor": { + "type": "string", + "description": "The page cursor for the next page of results. Empty if this is the last page." + } + } + }, + "GetOrderBookResponse": { + "properties": { + "asks": { + "description": "All Asks.", + "items": { + "$ref": "#/components/schemas/BookLevel" + }, + "type": "array" + }, + "bids": { + "description": "All Bids.", + "items": { + "$ref": "#/components/schemas/BookLevel" + }, + "type": "array" + }, + "market": { + "$ref": "#/components/schemas/Market" + } + }, + "type": "object" + }, + "Problem": { + "type": "object", + "properties": { + "type": { + "type": "string", + "format": "uri", + "description": "An absolute URI that identifies the problem type. When dereferenced,\nit SHOULD provide human-readable documentation for the problem type\n(e.g., using HTML).\n", + "default": "about:blank", + "example": "https://api.paxos.com/v2/problems/insufficient_funds" + }, + "title": { + "type": "string", + "description": "A short, summary of the problem type. Written in english and readable\nfor engineers (usually not suited for non technical stakeholders and\nnot localized); example: Service Unavailable\n", + "example": "Insufficient Funds" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "The HTTP status code generated by the origin server for this occurrence\nof the problem.\n", + "minimum": 100, + "maximum": 600, + "exclusiveMaximum": true, + "example": 403 + }, + "detail": { + "type": "string", + "description": "A human readable explanation specific to this occurrence of the\nproblem.\n", + "example": "Not enough funds in account." + }, + "meta": { + "type": "object", + "description": "Additional structured metadata about the error.\n" + } + } + } + }, + "responses": { + "bad_request_trade": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "Invalid Base Amount": { + "$ref": "#/components/examples/Problem_bad_request" + } + } + } + } + } + }, + "examples": { + "Problem_already_exists": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "nickname already exists", + "meta": { + "existing": { + "id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "nickname": "existing nickname", + "type": "NORMAL" + } + } + } + }, + "Problem_already_exists_crypto_withdrawal": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "transfer already exists with ref_id 'already_used_ref_id'", + "meta": { + "existing": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "ref_id": "already_used_ref_id", + "amount": "0.10000000", + "total": "0.10000023", + "fee": "0.00000023", + "asset": "BTC", + "balance_asset": "BTC", + "direction": "DEBIT", + "type": "CRYPTO_WITHDRAWAL", + "status": "COMPLETED", + "created_at": "2020-01-17T18:36:08.737Z", + "updated_at": "2020-01-17T18:37:08.737Z", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + }, + "destination_address": "1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2", + "crypto_network": "BITCOIN", + "crypto_tx_hash": "f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16" + } + } + } + }, + "Problem_already_exists_deposit_address": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "deposit address already exists with ref_id 'already_used_ref_id'", + "meta": { + "existing": { + "id": "34bd61ed-cf0a-4012-8be4-d347667b6154", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "crypto_network": "ETHEREUM", + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264", + "ref_id": "already_used_ref_id", + "metadata": { + "my_id": "4024ee50-eefb-4f2e-85c7-e7899c0b7da5" + }, + "address": "0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7" + } + } + } + }, + "Problem_already_exists_fiat_withdrawal": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "activity with external id already_used_ref_id already exists", + "meta": { + "existing": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339", + "profile_id": "5fc6d191-193c-4e28-94fa-656bbdbdfaad", + "identity_id": "54385e67-d7ef-40d1-b488-ceda6dd9b264", + "amount": "10.00", + "total": "10.00", + "fee": "0.0000000", + "asset": "USD", + "balance_asset": "USD", + "direction": "DEBIT", + "type": "CUBIX_WITHDRAWAL", + "status": "PENDING", + "created_at": "2023-07-13T18:36:08.737Z", + "updated_at": "2023-07-13T18:36:08.737Z", + "fiat_account_id": "caa82b32-8abd-4899-afdc-f9d4bf9b4e98" + } + } + } + }, + "Problem_already_exists_order": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "order already exists with ref_id 'already_used_ref_id'", + "meta": { + "existing": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "ref_id": "already_used_ref_id", + "status": "SUBMITTED", + "side": "BUY", + "market": "BTCUSD", + "quote_amount": "100.00" + } + } + } + }, + "Problem_already_exists_quote_execution": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/already-exists", + "title": "Already Exists", + "status": 409, + "detail": "quote execution already exists with ref_id 'already_used_ref_id'", + "meta": { + "existing": { + "id": "f190b163-208f-4d73-8deb-4fb8b24add00", + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "quote_id": "366a26d2-3098-4226-a520-4bb43ae4d922", + "ref_id": "already_used_ref_id", + "status": "CREATED", + "market": "BTCUSD", + "side": "BUY", + "price": "6001.2", + "base_amount": "0.016663334", + "base_asset": "BTC", + "quote_amount": "100.00", + "quote_asset": "USD", + "created_at": "2020-01-17T18:36:31.345Z", + "metadata": { + "customer_id": "9b8c9cba-801e-4418-adc0-ede709df6339" + } + } + } + } + }, + "Problem_bad_request": { + "value": { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "base_amount invalid: invalid amount '-10': must be positive decimal" + } + }, + "Problem_below_min_withdraw_limit": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/below-min-withdraw-limit", + "title": "Withdrawal Amount Too Small", + "status": 400, + "detail": "amount too small for network NETWORK_BTC minimum amount is 0.00001", + "meta": { + "limit": "0.00001", + "amount": "0.0000001" + } + } + }, + "Problem_exceed_max_withdraw_limit": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/exceed-max-withdraw-limit", + "title": "Withdrawal Amount Too Large", + "status": 400, + "detail": "withdrawal amount 0.3 exceeds withdrawal limit for this asset BTC", + "meta": { + "limit": "0.1", + "amount": "0.3" + } + } + }, + "Problem_exceed_precision": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/exceed-precision", + "title": "Exceeds Maximum Precision Allowed", + "status": 400, + "detail": "max precision allowed for asset ETH is 18" + } + }, + "Problem_expired": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/expired", + "title": "Expired", + "status": 403, + "detail": "offer expired at 0001-01-01T00:00:00Z", + "meta": { + "expired_at": "0001-01-01T00:00:00Z" + } + } + }, + "Problem_expired_quote": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/expired", + "title": "Expired", + "status": 403, + "detail": "quote 366a26d2-3098-4226-a520-4bb43ae4d922 expired at 2020-01-17T18:36:38Z", + "meta": { + "expired_at": "2020-01-17T18:36:38Z" + } + } + }, + "Problem_fee_expired_crypto_withdrawal": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/expired", + "title": "Expired", + "status": 403, + "detail": "fee 9e5828e2-0a10-4273-aa9c-f50bd0eaf344 expired at 2020-01-17T18:36:08.737Z", + "meta": { + "expired_at": "2020-01-17T18:36:08.737Z" + } + } + }, + "Problem_fee_not_found_crypto_withdrawal": { + "value": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "fee not found with id 9e5828e2-0a10-4273-aa9c-f50bd0eaf344" + } + }, + "Problem_forbidden": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "user account is disabled" + } + }, + "Problem_forbidden_order_cancel": { + "value": { + "type": "about:blank", + "title": "Forbidden", + "status": 403, + "detail": "order is not in cancellable state" + } + }, + "Problem_gateway_timeout": { + "value": { + "type": "about:blank", + "title": "Gateway Timeout", + "status": 504, + "detail": "timeout reached while creating the order" + } + }, + "Problem_insufficient_funds": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/insufficient-funds", + "title": "Insufficient Funds", + "status": 403, + "detail": "insufficient USD funds in profile b7b77d82-e6a7-4ae9-9904-36231aedf985: 100 needed, 50 available", + "meta": { + "profile_id": "b7b77d82-e6a7-4ae9-9904-36231aedf985", + "asset": "USD", + "available": "50", + "needed": "100" + } + } + }, + "Problem_internal_server_error": { + "value": { + "type": "about:blank", + "title": "Internal Server Error", + "status": 500 + } + }, + "Problem_market_conditions_prevented_execution": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/market-conditions-prevented-execution", + "title": "Market Conditions Prevented Execution", + "status": 403, + "detail": "market conditions have invalidated this order" + } + }, + "Problem_minimum_commission_exceeds_notional": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/minimum-commission-exceeds-notional", + "title": "Order notional value must exceed minimum commission", + "status": 400, + "detail": "The minimum notional for ETH is 1.500000" + } + }, + "Problem_not_found": { + "value": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "profile not found: b7b77d82-e6a7-4ae9-9904-36231aedf985" + } + }, + "Problem_not_found_quote": { + "value": { + "type": "about:blank", + "title": "Not Found", + "status": 404, + "detail": "quote not found with id 366a26d2-3098-4226-a520-4bb43ae4d922" + } + }, + "Problem_not_implemented": { + "value": { + "type": "about:blank", + "title": "Not Implemented", + "status": 501, + "detail": "Not implemented" + } + }, + "Problem_notional_value_too_large": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/notional-value-too-large", + "title": "Notional Value Too Large", + "status": 403, + "detail": "notional value too large for BTCUSD LIMIT order: order had notional value 1501234.56, but maximum allowed notional value is 1500000", + "meta": { + "market": "BTCUSD", + "order_type": "LIMIT", + "order_notional_value": "1501234.56", + "max_notional_value": "1500000" + } + } + }, + "Problem_rejected": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/rejected", + "title": "Rejected", + "status": 403, + "detail": "extreme market conditions have invalidated this quote execution", + "meta": {} + } + }, + "Problem_service_unavailable": { + "value": { + "type": "about:blank", + "title": "Service Unavailable", + "status": 503, + "detail": "quotes disabled" + } + }, + "Problem_too_many_requests": { + "value": { + "type": "about:blank", + "title": "Too Many Requests", + "status": 429, + "detail": "Too many requests" + } + }, + "Problem_unauthenticated": { + "value": { + "type": "about:blank", + "title": "Unauthorized", + "status": 401, + "detail": "no authorization header set" + } + }, + "Problem_unavailable_market": { + "value": { + "type": "https://developer.paxos.com/docs/v2/problems/unavailable-market", + "title": "Planned Market Outage", + "status": 403, + "detail": "no marketable orders may be submitted at this time" + } + } + }, + "securitySchemes": { + "OAuth2": { + "type": "oauth2", + "description": "Paxos APIs use [OAuth 2](https://tools.ietf.org/html/rfc6749) with the [client credentials](https://tools.ietf.org/html/rfc6749#section-4.4) grant flow.\n\n**Token URLs:**\n- Production: https://oauth.paxos.com/oauth2/token\n- Sandbox: https://oauth.sandbox.paxos.com/oauth2/token\n\nLearn more in the [API credentials guide →](https://docs.paxos.com/developer/credentials)\n", + "flows": { + "clientCredentials": { + "tokenUrl": "https://oauth.paxos.com/oauth2/token", + "scopes": { + "conversion:read_conversion_stablecoin": "Retrieve stablecoin conversion details", + "conversion:write_conversion_stablecoin": "Create or cancel a stablecoin conversion", + "exchange:historical_prices": "Retrieve marketnaverage prices at a certain time increment", + "exchange:read_order": "Retrieve order or order execution details", + "exchange:read_quote": "Retrieve quote details for buying or selling an asset", + "exchange:read_quote_execution": "Retrieve quote execution details", + "exchange:write_quote_execution": "Create a quote execution for buying or selling an asset", + "exchange:write_order": "Create or cancel an order for buying or selling an asset", + "fee:write_crypto_withdrawal_fee": "Create a guaranteed fee for crypto withdrawal", + "funding:read_profile": "Retrieve Profile details and deposit funds in Sandbox", + "funding:write_profile": "Create a Profile", + "identity:read_account": "Retrieve Account details", + "identity:read_identity": "Retrieve Identity details or documents", + "identity:write_account": "Create or update Account and Account Members", + "identity:write_identity": "Create or update Identity details and set Sandbox Identify Status", + "settlement:read_transaction": "Retrieve settlement transaction details", + "settlement:write_transaction": "Create, affirm or cancel a settlement transaction", + "tax:read_tax_form": "Retrieve tax details", + "tax:read_tax_lot": "Retrieve tax lot details", + "tax:write_tax_lot": "Update the given tax-lot ID", + "transfer:read_deposit_address": "Retrieve deposit address details", + "transfer:read_fiat_account": "Retrieve Fiat Account details", + "transfer:read_fiat_deposit_instructions": "Retrieve fiat deposit instruction details", + "transfer:read_transfer": "Retrieve transfer details", + "transfer:read_transfer_limit": "Retrieve limits for the given transaction type", + "transfer:reject_crypto_deposit": "Reject a crypto deposit (travel rule)", + "transfer:update_crypto_deposit": "Provide required travel-rule details", + "transfer:write_crypto_withdrawal": "Withdraw asset to a specified destination address", + "transfer:write_deposit_address": "Create an deposit address on a blockchain network", + "transfer:write_fiat_account": "Create, update or delete a Fiat Account", + "transfer:write_fiat_deposit_instructions": "Create, update or delete fiat deposit instructions", + "transfer:write_internal_transfer": "Transfer assets between two Profiles", + "transfer:write_sandbox_fiat_deposit": "Initiate a test fiat deposit in the Sandbox environment", + "transfer:write_fiat_withdrawal": "Withdraw fiat to the given destination", + "events:read_event": "Retrieve events" + } + } + } + } + } + }, + "x-tagGroups": [ + { + "name": "Deposits and Withdrawals", + "tags": [ + "Transfers", + "Fiat Transfers", + "Deposit Addresses", + "Crypto Deposits", + "Crypto Withdrawals", + "Fees", + "Internal Transfers", + "Paxos Transfers", + "Limits" + ] + }, + { + "name": "Identity", + "tags": [ + "Identity", + "Institution Members", + "Accounts", + "Account Members", + "Identity Documents" + ] + }, + { + "name": "API Credentials", + "tags": [ + "API Credentials" + ] + }, + { + "name": "Profiles", + "tags": [ + "Profiles" + ] + }, + { + "name": "Sandbox", + "tags": [ + "Sandbox Deposits", + "Sandbox Identity", + "Sandbox Fiat Transfers" + ] + }, + { + "name": "Settlements", + "tags": [ + "Settlement" + ] + }, + { + "name": "Stablecoin Conversion", + "tags": [ + "Stablecoin Conversion" + ] + }, + { + "name": "Taxes", + "tags": [ + "Tax Forms" + ] + }, + { + "name": "Trading", + "tags": [ + "Market Data", + "Orders", + "Quotes", + "Quote Executions", + "Pricing" + ] + }, + { + "name": "Rewards", + "tags": [ + "Monitoring Addresses", + "Statements", + "Payments" + ] + }, + { + "name": "Events", + "tags": [ + "Events", + "Event Types", + "Event Objects" + ] + } + ], + "servers": [ + { + "url": "https://api.paxos.com/v2", + "description": "Production" + }, + { + "url": "https://api.sandbox.paxos.com/v2", + "description": "Sandbox" + } + ] + } \ No newline at end of file diff --git a/docs.json b/docs.json index 6ed7951..89a304e 100644 --- a/docs.json +++ b/docs.json @@ -809,13 +809,6 @@ "source": "api-reference/preview/paxos-v2-preview-orchestration.openapi.json", "directory": "api-reference/preview" } - }, - { - "group": "Identity Previews", - "openapi": { - "source": "api-reference/preview/paxos-v2-preview-identity.openapi.json", - "directory": "api-reference/preview" - } } ] }, @@ -880,7 +873,10 @@ } }, "api": { - "openapi": "https://developer.paxos.com/docs/paxos-v2.openapi.json" + "openapi": { + "source": "api-reference/temp-api-spec.json", + "directory": "api-reference" + } }, "contextual": { "options": ["copy", "view", "claude", "chatgpt"] From 46d83dca7b26d213e00aa7a275d9062f92e24604 Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 8 Sep 2025 16:42:37 +0100 Subject: [PATCH 7/7] Add new Identity Previews group to API documentation and fix typo in status_details schema. Enhance clarity and organization of the API reference. --- api-reference/temp-api-spec.json | 2 +- docs.json | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/api-reference/temp-api-spec.json b/api-reference/temp-api-spec.json index fdd2d85..efd44bd 100644 --- a/api-reference/temp-api-spec.json +++ b/api-reference/temp-api-spec.json @@ -10012,7 +10012,7 @@ "status": { "$ref": "#/components/schemas/IdentityStatus" }, - "status_details"cle: { + "status_details": { "$ref": "#/components/schemas/IdentityStatus" }, "user_disabled": { diff --git a/docs.json b/docs.json index 89a304e..b9ab576 100644 --- a/docs.json +++ b/docs.json @@ -809,6 +809,13 @@ "source": "api-reference/preview/paxos-v2-preview-orchestration.openapi.json", "directory": "api-reference/preview" } + }, + { + "group": "Identity Previews", + "openapi": { + "source": "api-reference/preview/paxos-v2-preview-identity.openapi.json", + "directory": "api-reference/preview" + } } ] },