Overview

Outpost Hosted Onboarding lets you onboard your existing merchants to Outpost services with minimal merchant friction. You retain full control over the merchant relationship, entry point, and checkout experience. Outpost provides the onboarding infrastructure, review workflow, and operations underneath.

Build with AI

Copy the full integration brief and paste it into your AI coding assistant to scaffold the integration automatically.

One-click brief for your AI agent.

Integration Flow

Your SystemOutpost APIHosted UIOutpost Ops
  • You initiate — Call the Outpost API with the merchant's company data to create an onboarding application
  • Merchant completes — Redirect the merchant to the Outpost-hosted onboarding UI where they fill in product-specific details and submit
  • Outpost reviews — Outpost reviews the application asynchronously and approves or rejects it. You poll the application status

Base URL

EnvironmentBase URL
Staginghttps://partner.outpostnow.tech
Productionhttps://partner.outpostanywhere.com

All endpoints use the /partner/api prefix.

Authentication

All Partner API requests require authentication using a JWT Bearer token provided in the Authorization header.

Request Header

Authorization: Bearer <your_access_api_token>

Key Points

  • Create and manage your API credentials (client ID and client secret) in the Partner Portal
  • You can have up to 2 active API credentials at a time, supporting safe key rotation
  • Include the JWT Bearer token in the Authorization header of every request
  • Keep your API credentials secure — do not expose them in client-side code or public repositories

Example Request

# Include your JWT Bearer token in every request
curl -X GET "https://partner.outpostanywhere.com/partner/api/onboarding/applications/{applicationId}" \
  -H "Authorization: Bearer $API_TOKEN"

Initiate Onboarding

POST/partner/api/onboarding/initiate

Creates a new onboarding application for a merchant, or resumes an existing one. This endpoint is idempotent: calling it again with the same merchantReference and productCode returns the existing application.

Request Headers

ParameterTypeRequiredDescription
AuthorizationYesBearer token for authentication
Content-TypeYesapplication/json

Request Body Parameters

ParameterTypeRequiredDescription
merchantReferencestringYesYour unique identifier for this merchant
productCodestringYesProduct to onboard for (e.g., tor for Tax of Record)
modestringNoOnboarding mode. Use HOSTED
returnUrlstringNoURL to redirect the merchant after completing hosted onboarding
companyobjectYesMerchant company information
company.legalNamestringYesLegal entity name
company.tradingNamestringNoTrading or brand name
company.websitestringYesCompany website URL
company.taxIdstringYesTax identification number (e.g., VAT number)
company.registrationNumberstringYesCompany registration number
company.jurisdictionstringYesCountry of incorporation (ISO 3166-1 alpha-2)
company.gmvTierstringNoGross Merchandise Volume tier
company.registeredAddressobjectYesRegistered business address
company.registeredAddress.line1stringYesPrimary address line
company.registeredAddress.line2stringNoSecondary address line
company.registeredAddress.citystringYesCity
company.registeredAddress.statestringNoState or province
company.registeredAddress.postalCodestringYesPostal or ZIP code
company.registeredAddress.countrystringYesISO 3166-1 alpha-2 country code
complianceSummaryobjectNoPre-existing compliance data from your KYC process
merchantContextmapNoArbitrary key-value metadata about the merchant

Response 200 OK

{
  "applicationId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "status": "DRAFT",
  "mode": "HOSTED",
  "isExistingApplication": false,
  "onboardingUrl": "https://onboarding.outpostanywhere.com/your-company/onboarding?app=f47ac10b-...&token=..."
}

Response Fields

ParameterTypeRequiredDescription
applicationIdstringUnique identifier for the onboarding application (UUID)
statusstringCurrent application status
modestringOnboarding mode (HOSTED)
isExistingApplicationbooleantrue if an existing application was returned
onboardingUrlstringHosted onboarding URL to redirect the merchant to

Error Responses

HTTPCodeDescription
400invalid_argumentMissing or invalid required company fields

Code Example

curl -X POST "https://partner.outpostanywhere.com/partner/api/onboarding/initiate" \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "merchantReference": "mrc_123456",
    "productCode": "tor",
    "mode": "HOSTED",
    "returnUrl": "https://your-app.example.com/onboarding/complete",
    "company": {
      "legalName": "Acme Digital Ltd",
      "tradingName": "Acme",
      "website": "https://acme.example",
      "taxId": "GB123456789",
      "registrationNumber": "12345678",
      "jurisdiction": "GB",
      "registeredAddress": {
        "line1": "1 Example Street",
        "city": "London",
        "postalCode": "EC1A 1AA",
        "country": "GB"
      }
    }
  }' | jq

Get Application

GET/partner/api/onboarding/applications/{applicationId}

Retrieves the current state of an onboarding application. Use this endpoint to poll for status changes after the merchant has been redirected to the hosted onboarding UI. Recommended polling interval: 30-60 seconds.

Response Fields

ParameterTypeRequiredDescription
applicationIdstringUnique identifier (UUID)
statusstringCurrent status (DRAFT, IN_REVIEW, APPROVED, REJECTED, CHANGES_REQUESTED)
modestringOnboarding mode (HOSTED)
partnerIdstringYour partner identifier
partnerMerchantIdstringThe merchantReference you provided at initiation
productIdstringProduct code (e.g., tor)
companyobjectMerchant company information provided at initiation
selectedRegionsstring[]Regions selected by the merchant
businessDescriptionstringMerchant's business description
storeUrlsstring[]Merchant's store or checkout URLs
auditobjectTimestamps for application lifecycle events
audit.createdAtstringISO 8601 timestamp when the application was created
audit.updatedAtstringISO 8601 timestamp of the last update
audit.submittedAtstringTimestamp when merchant submitted (null if not yet)
audit.reviewedAtstringTimestamp when Outpost reviewed (null if not yet)
audit.reviewMessagestringReviewer message (e.g., rejection reason, requested changes)

Response 200 OK

{
  "applicationId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "status": "DRAFT",
  "mode": "HOSTED",
  "partnerId": "partner_example",
  "partnerMerchantId": "mrc_123456",
  "productId": "tor",
  "company": {
    "legalName": "Acme Digital Ltd",
    "jurisdiction": "GB",
    "...": "..."
  },
  "selectedRegions": [
    "GB",
    "DE"
  ],
  "businessDescription": "Subscription software for finance teams",
  "storeUrls": [
    "https://acme.example/checkout"
  ],
  "audit": {
    "createdAt": "2026-03-17T10:00:00Z",
    "updatedAt": "2026-03-17T11:00:00Z",
    "submittedAt": null,
    "reviewedAt": null,
    "reviewMessage": null
  }
}

Error Responses

HTTPCodeDescription
400missing_applicationIdInvalid or missing applicationId path parameter
404not_foundApplication not found or does not belong to your account

Code Example

curl "https://partner.outpostanywhere.com/partner/api/onboarding/applications/{applicationId}" \
  -H "Authorization: Bearer $API_TOKEN" | jq

Update Application

PATCH/partner/api/onboarding/applications/{applicationId}

Updates merchant-editable fields on a draft application. Use this to pre-fill data before the merchant visits the hosted onboarding UI, or to update data after Outpost has requested changes. Only allowed when status is DRAFT or CHANGES_REQUESTED.

Request Body (all fields optional)

ParameterTypeRequiredDescription
selectedRegionsstring[]NoISO 3166-1 alpha-2 country codes for desired regions
businessDescriptionstringNoDescription of the merchant's business
storeUrlsstring[]NoMerchant's store or checkout URLs
categorystringNoBusiness category

Returns the full application state (same structure as Get Application).

Error Responses

HTTPCodeDescription
400missing_applicationIdInvalid or missing applicationId
404not_foundApplication not found or does not belong to your account
409invalid_statusApplication is not in DRAFT or CHANGES_REQUESTED status

Code Example

curl -X PATCH "https://partner.outpostanywhere.com/partner/api/onboarding/applications/{applicationId}" \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "selectedRegions": ["GB", "DE", "FR"],
    "businessDescription": "SaaS platform for finance teams",
    "storeUrls": ["https://acme.example/checkout"]
  }' | jq

Application Status Lifecycle

Onboarding applications progress through these statuses. Terminal statuses (APPROVED and REJECTED) cannot be modified or regenerated.

Status Transitions

DRAFT ──[merchant submits]──> IN_REVIEW
                                │
             ┌──────────────────┼──────────────────┐
             │                  │                   │
             ▼                  ▼                   ▼
       CHANGES_REQUESTED     APPROVED            REJECTED
             │              (terminal)           (terminal)
             │
             └──[merchant resubmits]──> IN_REVIEW

Statuses

StatusDescription
DRAFTApplication created but not yet submitted by the merchant
IN_REVIEWMerchant has submitted, Outpost is reviewing
CHANGES_REQUESTEDOutpost requested changes; the merchant can update and resubmit
APPROVEDApplication approved by Outpost (terminal)
REJECTEDApplication rejected by Outpost (terminal)

Who Triggers Each Transition

TransitionTriggered By
DRAFT → IN_REVIEWMerchant, via the hosted onboarding UI
IN_REVIEW → APPROVEDOutpost operations team
IN_REVIEW → REJECTEDOutpost operations team
IN_REVIEW → CHANGES_REQUESTEDOutpost operations team
CHANGES_REQUESTED → IN_REVIEWMerchant, via the hosted onboarding UI

What You Should Do at Each Status

StatusYour Action
DRAFTWait for the merchant to visit the hosted URL and submit. Optionally pre-fill data via PATCH.
IN_REVIEWNo action needed. Wait for Outpost review.
CHANGES_REQUESTEDNotify the merchant. Check audit.reviewMessage for details. Regenerate the link if expired.
APPROVEDMerchant is approved. Proceed with activation in your system.
REJECTEDNotify the merchant. Check audit.reviewMessage for the reason.

Data Models

Reference for the data structures used in onboarding API requests and responses.

OnboardingCompany

ParameterTypeRequiredDescription
legalNamestringYesLegal entity name
tradingNamestringNoTrading or brand name
websitestringYesCompany website URL
taxIdstringYesTax identification number
registrationNumberstringYesCompany registration number
jurisdictionstringYesCountry of incorporation (ISO 3166-1 alpha-2)
gmvTierstringNoGross Merchandise Volume tier
registeredAddressOnboardingAddressYesRegistered business address

OnboardingAddress

ParameterTypeRequiredDescription
line1stringYesPrimary address line
line2stringNoSecondary address line
citystringYesCity
statestringNoState or province
postalCodestringYesPostal or ZIP code
countrystringYesISO 3166-1 alpha-2 country code

PartnerComplianceSummary

ParameterTypeRequiredDescription
verificationStatusstringNoYour verification status for this merchant
riskLevelstringNoYour risk assessment level
countryOfIncorporationstringNoCountry of incorporation from your records
hasOpenComplianceFlagsbooleanNoWhether there are open compliance flags

OnboardingGmvTier

ValueDescription
UP_TO_100KUp to $100K annual GMV
FROM_100K_TO_250K$100K to $250K
FROM_250K_TO_500K$250K to $500K
FROM_500K_TO_1M$500K to $1M
FROM_1M_TO_10M$1M to $10M
FROM_10M_TO_50M$10M to $50M
FROM_50M_TO_100M$50M to $100M
FROM_100M_TO_250M$100M to $250M
FROM_250M_TO_500M$250M to $500M
FROM_500M_TO_1B$500M to $1B

PartnerAuditResponse

ParameterTypeRequiredDescription
createdAtstringISO 8601 timestamp when the application was created
updatedAtstringISO 8601 timestamp of the last update
submittedAtstringTimestamp when the merchant submitted (null if not yet)
reviewedAtstringTimestamp when Outpost reviewed (null if not yet)
reviewMessagestringReviewer's message (e.g., rejection reason, requested changes)

Error Handling

All error responses follow a consistent structure with a category code and field-specific error details.

Error Response Format

{
  "code": "invalid_argument",
  "errors": [
    {
      "field": "company.legalName",
      "message": "required"
    }
  ]
}

Error Codes

CodeDescription
invalid_argumentOne or more request fields are invalid or missing
not_foundThe requested application was not found or does not belong to your account
invalid_statusThe application is not in a status that allows the requested operation
terminal_statusThe application is in a terminal status and cannot be modified
incomplete_applicationThe application is missing required fields and cannot be submitted

Common Error Scenarios

ScenarioStatusCodeResolution
Missing required company fields at initiation400invalid_argumentInclude all required fields in the company object
Application not found404not_foundVerify the applicationId and ensure it belongs to your account
Updating an application in review409invalid_statusYou can only update applications in DRAFT or CHANGES_REQUESTED status
Regenerating link for approved/rejected app409terminal_statusTerminal applications cannot be modified. Create a new application if needed

Required Fields for Submission

Before the merchant can submit the application in the hosted UI, these fields must be filled (by the merchant or pre-filled by you via PATCH):

FieldDescription
selectedRegionsAt least one region must be selected
businessDescriptionBusiness description must be provided
storeUrlsAt least one store or checkout URL must be provided

Ready to integrate?

Copy the complete integration plan for your AI coding assistant, or contact us for white-glove onboarding.

One-click brief for your AI agent.