Coinme Crypto-as-a-Service API

Partner API for embedding crypto: KYC onboarding, quotes, buy/sell transactions, wallets and sends, cash on/off-ramp order templates, balances, transaction history and limits, and webhooks.

OpenAPI Specification

coinme-caas-openapi.json Raw ↑
{
  "openapi": "3.1.0",
  "info": {
    "title": "Coinme Crypto-as-a-Service API",
    "version": "1.2",
    "description": "Coinme Crypto-as-a-Service (CaaS) API. Harvested from provider-published per-endpoint OpenAPI blocks at docs.coinme.com/reference. Modular crypto infrastructure: KYC onboarding, quotes, buy/sell orders, wallets, sends, cash on/off-ramp, payment methods, and webhooks."
  },
  "servers": [
    {
      "url": "https://caas.coinme.com/services",
      "description": "production"
    },
    {
      "url": "https://caas-staging.coinme.com/services",
      "description": "staging"
    }
  ],
  "components": {
    "securitySchemes": {
      "basic": {
        "type": "http",
        "scheme": "basic"
      },
      "x-api-key": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key"
      }
    }
  },
  "paths": {
    "/authorize": {
      "post": {
        "summary": "Get Authorization Token",
        "description": "The first step for a partner is to obtain authentication token by calling the Coinme authorize endpoint, this token has a 60m life and needs to be passed with each subsequent call",
        "operationId": "initiate-authorize",
        "parameters": [
          {
            "name": "User-Agent",
            "in": "header",
            "description": "Partner User Agent ID (given by Coinme)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          },
          "400": {
            "description": "400",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          },
          "401": {
            "description": "401",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          },
          "500": {
            "description": "500",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          }
        },
        "deprecated": false,
        "security": [
          {
            "basic": []
          }
        ]
      }
    },
    "/mobileAuth": {
      "post": {
        "summary": "Initiate Mobile Auth",
        "description": "",
        "operationId": "mobile-auth",
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token {authorize} endpoint",
            "required": true,
            "schema": {
              "type": "string",
              "default": "Bearer ******"
            }
          },
          {
            "name": "User-Agent",
            "in": "header",
            "description": "Partner User Agent ID (provided by Coinme)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "deviceIp",
                  "consentTransactionId",
                  "consentDescription",
                  "consentCollectedTimestamp"
                ],
                "properties": {
                  "deviceIp": {
                    "type": "string",
                    "description": "IP of mobile device. Can be IPv4 or IPv6"
                  },
                  "consentTransactionId": {
                    "type": "string",
                    "description": "Unique id of the consent collected by the client"
                  },
                  "consentDescription": {
                    "type": "string",
                    "description": "The client describes the type of consent (electronic/paper), use case and reference to the version of Terms and Conditions (T&Cs), if applicable"
                  },
                  "consentCollectedTimestamp": {
                    "type": "string",
                    "description": "Date/Time field when the original consent was collected by the client (format: YYYY-MM-DD)",
                    "format": "date"
                  },
                  "requestId": {
                    "type": "string",
                    "description": "Optional requestId that can be used to track the requests through the entire Mobile Auth flow. If not sent, it will be generated automatically"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"data\": \n  {\n    \"redirectTargetUrl\": \"http://www.example.com?vfp=abc123...\"\n  },\n  \"errorResponse\": null\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "redirectTargetUrl": {
                          "type": "string",
                          "example": "http://www.example.com?vfp=abc123..."
                        },
                        "requestId": {
                          "type": "string"
                        }
                      },
                      "description": "If there are no client errors this field will be filled out and errorResponse will be null"
                    },
                    "errorResponse": {
                      "description": "If there are client errors, this field will be filled out and data will be null",
                      "type": "object",
                      "properties": {
                        "timestamp": {
                          "type": "string"
                        },
                        "httpStatus": {
                          "type": "string"
                        },
                        "errorData": {
                          "type": "array",
                          "items": {
                            "properties": {
                              "errorCode": {
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "path": {
                          "type": "string"
                        },
                        "retry": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"data\": null,\n  \"errorResponse\": {\n    \"httpStatus\":\"200\",\n    \"timestamp\":\"2022-02-01T18:59:28.297Z\",//UTC\n    \"path\":\"POST /services/mobileAuth\",\n    \"errorData\": [\n      {\n        \"errorCode\":\"123-123-123-123\",//The error code is just a sample showing the structure of the error code.\n        \"message\":\"Required field missing or blank\"\n      }\n    ],\n    \"retry\":\"N\"\n  }\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          },
          "401": {
            "description": "401",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          },
          "500": {
            "description": "500",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          }
        },
        "deprecated": false,
        "security": [
          {
            "x-api-key": []
          }
        ]
      }
    },
    "/mobileAuthFinish": {
      "post": {
        "summary": "Initiate Mobile Auth Finish",
        "description": "",
        "operationId": "mobile-auth-finish",
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token {authorize} endpoint",
            "required": true,
            "schema": {
              "type": "string",
              "default": "Bearer ******"
            }
          },
          {
            "name": "User-Agent",
            "in": "header",
            "description": "Partner User Agent ID (provided by Coinme)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "verificationFingerprint"
                ],
                "properties": {
                  "verificationFingerprint": {
                    "type": "string",
                    "description": "Extracted from the URL at finalTargetUrl"
                  },
                  "requestId": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"data\": \n  {\n    \"authenticatedPhoneNumber\": \"15553031212\"\n  },\n  \"errorResponse\": null\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "authenticatedPhoneNumber": {
                          "type": "string",
                          "example": "15553031212"
                        },
                        "requestId": {
                          "type": "string"
                        }
                      },
                      "description": "If there are no client errors this field will be filled out and errorResponse will be null"
                    },
                    "errorResponse": {
                      "description": "If there are client errors, this field will be filled out and data will be null",
                      "type": "object",
                      "properties": {
                        "timestamp": {
                          "type": "string"
                        },
                        "httpStatus": {
                          "type": "string"
                        },
                        "errorData": {
                          "type": "array",
                          "items": {
                            "properties": {
                              "errorCode": {
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "path": {
                          "type": "string"
                        },
                        "retry": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"data\": null,\n  \"errorResponse\": {\n    \"httpStatus\":\"200\",\n    \"timestamp\":\"2022-02-01T18:59:28.297Z\",//UTC\n    \"path\":\"POST /services/mobileAuthFinish\",\n    \"errorData\": [\n      {\n        \"errorCode\":\"123-123-123-123\",//The error code is just a sample showing the structure of the error code.\n        \"message\":\"Required field missing or blank\"\n      }\n    ],\n    \"retry\":\"N\"\n  }\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          },
          "401": {
            "description": "401",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          },
          "500": {
            "description": "500",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          }
        },
        "deprecated": false,
        "security": [
          {
            "x-api-key": []
          }
        ]
      }
    },
    "/sendAuthSms": {
      "post": {
        "summary": "Initiate Instant Link",
        "description": "This flow requires the user to enter their phone number and to click on the authentication link in the SMS that will be sent to that phone number.",
        "operationId": "initiate-instant-link",
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token {authorize} endpoint",
            "required": true,
            "schema": {
              "type": "string",
              "default": "Bearer ******"
            }
          },
          {
            "name": "User-Agent",
            "in": "header",
            "description": "Partner User Agent ID (provided by Coinme)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "mobileNumber",
                  "deviceIp"
                ],
                "properties": {
                  "mobileNumber": {
                    "type": "string",
                    "description": "Phone number to send link to"
                  },
                  "deviceIp": {
                    "type": "string",
                    "description": "IP of mobile device. Can be IPv4 or IPv6"
                  },
                  "requestId": {
                    "type": "string",
                    "description": "Optional requestId that can be used to track the requests through the entire Instant Link flow. If not sent, it will be generated automatically"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"data\": \n  {\n    \"authUrl\": \"www.example.com/auth/aBc123\" // smsRedirectUrl with authId appended to the path (aBc123)\n  },\n  \"errorResponse\": null\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "authUrl": {
                          "type": "string",
                          "example": "www.example.com/auth/aBc123"
                        },
                        "requestId": {
                          "type": "string"
                        }
                      },
                      "description": "If there are no client errors this field will be filled out and errorResponse will be null"
                    },
                    "errorResponse": {
                      "description": "If there are client errors, this field will be filled out and data will be null",
                      "type": "object",
                      "properties": {
                        "timestamp": {
                          "type": "string"
                        },
                        "httpStatus": {
                          "type": "string"
                        },
                        "errorData": {
                          "type": "array",
                          "items": {
                            "properties": {
                              "errorCode": {
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "path": {
                          "type": "string"
                        },
                        "retry": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"data\": null,\n  \"errorResponse\": {\n    \"httpStatus\":\"200\",\n    \"timestamp\":\"2022-02-01T18:59:28.297Z\",//UTC\n    \"path\":\"POST /services/sendAuthSms\",\n    \"errorData\": [\n      {\n        \"errorCode\":\"123-123-123-123\",//The error code is just a sample showing the structure of the error code.\n        \"message\":\"Failed to send auth SMS to the user\"\n      }\n    ],\n    \"retry\":\"N\"\n  }\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          },
          "401": {
            "description": "401",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          },
          "500": {
            "description": "500",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          }
        },
        "deprecated": false,
        "security": [
          {
            "x-api-key": []
          }
        ]
      }
    },
    "/smsAuth/{authId}": {
      "get": {
        "summary": "Get Instant Link by ID",
        "description": "To be used for the First Option in the Customer Onboarding using Coinme KYC guide. The smsRedirectUrl is a URL in the Coinme domain",
        "operationId": "get-instant-link-by-id",
        "parameters": [
          {
            "name": "authId",
            "in": "path",
            "description": "authId appended to the smsRedirectUrl from the Initiate Instant Link response",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token {authorize} endpoint",
            "required": true,
            "schema": {
              "type": "string",
              "default": "Bearer ******"
            }
          },
          {
            "name": "User-Agent",
            "in": "header",
            "description": "Partner User Agent ID (provided by Coinme)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          },
          "400": {
            "description": "400",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          },
          "401": {
            "description": "401",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          },
          "500": {
            "description": "500",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          }
        },
        "deprecated": false,
        "security": [
          {
            "x-api-key": []
          }
        ]
      }
    },
    "/authLinkResult": {
      "post": {
        "summary": "Initiate Instant Link Finish",
        "description": "Extract the vfp value from the URL and use it to ask for the result of the authentication.",
        "operationId": "instant-link-finish",
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token {authorize} endpoint",
            "required": true,
            "schema": {
              "type": "string",
              "default": "Bearer ******"
            }
          },
          {
            "name": "User-Agent",
            "in": "header",
            "description": "Partner User Agent ID (provided by Coinme)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "verificationFingerprint"
                ],
                "properties": {
                  "verificationFingerprint": {
                    "type": "string",
                    "description": "Extracted from the URL at finalTargetUrl"
                  },
                  "requestId": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"data\": \n  {\n    \"authenticatedPhoneNumber\": \"15553031212\"\n  },\n  \"errorResponse\": null\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "authenticatedPhoneNumber": {
                          "type": "string",
                          "example": "15553031212"
                        },
                        "requestId": {
                          "type": "string"
                        }
                      },
                      "description": "If there are no client errors this field will be filled out and errorResponse will be null"
                    },
                    "errorResponse": {
                      "description": "If there are client errors, this field will be filled out and data will be null",
                      "type": "object",
                      "properties": {
                        "timestamp": {
                          "type": "string"
                        },
                        "httpStatus": {
                          "type": "string"
                        },
                        "errorData": {
                          "type": "array",
                          "items": {
                            "properties": {
                              "errorCode": {
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "path": {
                          "type": "string"
                        },
                        "retry": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "400",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n  \"data\": null,\n  \"errorResponse\": {\n    \"httpStatus\":\"200\",\n    \"timestamp\":\"2022-02-01T18:59:28.297Z\",//UTC\n    \"path\":\"POST /services/authLinkResult\",\n    \"errorData\": [\n      {\n        \"errorCode\":\"123-123-123-123\",//The error code is just a sample showing the structure of the error code.\n        \"message\":\"Required field missing or blank\"\n      }\n    ],\n    \"retry\":\"N\"\n  }\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {}
                }
              }
            }
          },
          "401": {
            "description": "401",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          },
          "500": {
            "description": "500",
            "content": {
              "text/plain": {
                "examples": {
                  "Result": {
                    "value": ""
                  }
                }
              }
            }
          }
        },
        "deprecated": false,
        "security": [
          {
            "x-api-key": []
          }
        ]
      }
    },
    "/identity": {
      "post": {
        "summary": "Initiate Identity Pre-Fill",
        "description": "The following API will attempt to retrieve the personal information for a user given their phone number and Social Security number. In order to keep the information confidential, Coinme uses a third party, VeryGoodSecurity, as a reverse proxy to create a token for the ssn upon the request and then decrypt the token on the request to Prove\u2019s pre-fill service.",
        "operationId": "identity",
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token {authorize} endpoint",
            "required": true,
            "schema": {
              "type": "string",
              "default": "Bearer ******"
            }
          },
          {
            "name": "User-Agent",
            "in": "header",
            "description": "Partner User Agent ID (provided by Coinme)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "last4",
                  "phoneNumber"
                ],
                "properties": {
                  "last4": {
                    "type": "string",
                    "description": "Last 4 digits of the Social Security Number (SSN)"
                  },
                  "phoneNumber": {
                    "type": "integer",
                    "description": "10-digit phone number",
                    "format": "int32"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "200",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n\t\"data\": {\n\t\t\"requestId\": \"<<UUID>>\",\n\t\t\"status\": 0,\n\t\t\"description\": \"Success.\",\n\t\t\"additionalInfo\": null,\n\t\t\"response\": {\n\t\t\t\"transactionId\": \"12228113388\",\n\t\t\t\"phoneNumber\": \"<<User Phone Number>>\",\n\t\t\t\"lineType\": \"Landline\",\n\t\t\t\"carrier\": \"<<Carrier>>\",\n\t\t\t\"countryCode\": \"US\",\n\t\t\t\"reasonCodes\": [\n\t\t\t<<List of 2-digit reason codes>>\n\t\t\t],\n\t\t\t\"individual\": {\n\t\t\t\t\"firstName\": \"<<fname>>\",\n\t\t\t\t\"lastName\": \"<<lname>>\",\n\t\t\t\t\"addresses\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"address\": \"<<street>>\",\n\t\t\t\t\t\t\"extendedAddress\": \"\",\n\t\t\t\t\t\t\"city\": \"<<city>>\",\n\t\t\t\t\t\t\"region\": \"<<state>>\",\n\t\t\t\t\t\t\"postalCode\": \"<<zip>>\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"emailAddresses\": null,\n\t\t\t\t\"dob\": \"YYYY-MM-dd\",\n\t\t\t\t\"ssn\": \"<<SSN Token>>\"\n\t\t\t}\n\t\t}\n\t},\n\t\"errorResponse\": null\n}"
                  }
                }
              }
            }
          },
          "400": {
            "description": "400",
            "content": {
              "application/json": {
                "examples": {
                  "Result": {
                    "value": "{\n\t\"data\": null,\n\t\"errorResponse\": {\n\t\t\"timestamp\": \"2023-08-30T04:43:56.286644803Z\",\n\t\t\"httpStatus\": 200,\n\t\t\"errorData\": [\n\t\t\t{\n\t\t\t\t\"errorCode\": \"131-400-110-004\",\n\t\t\t\t\"message\": \"Subscriber is not found on the required whitelist. - \"\n\t\t\t}\n\t\t],\n\t\t\"path\": \"POST /services/identity\"\n\t}\n}"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {},
                    "errorResponse": {
                      "type": "object",
                      "properties": {
                        "timestamp": {
                          "type": "string",
                          "example": "2023-08-30T04:43:56.286644803Z"
                        },
                        "httpStatus": {
                          "type": "integer",
                          "example": 200,
                         

# --- truncated at 32 KB (271 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/coinme/refs/heads/main/openapi/coinme-caas-openapi.json