Skip to main content
POST
https://cc.firmly.work
/
api
/
v1
/
payment
/
domains
/
{domain}
/
complete-order
Complete Order
curl --request POST \
  --url https://cc.firmly.work/api/v1/payment/domains/{domain}/complete-order \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'x-firmly-authorization: <x-firmly-authorization>' \
  --data '
{
  "encrypted_card": "<string>",
  "billing_info": {},
  "captcha_token": "<string>"
}
'
{
  "platform_order_number": "<string>",
  "cart_id": "<string>",
  "line_items": [
    {}
  ],
  "total": {},
  "shipping_info": {},
  "shipping_method": {}
}

Overview

Completes the checkout process by placing an order with the merchant. This endpoint requires an existing cart with items and shipping information.

Authentication

x-firmly-authorization
string
required
Device authentication token from Browser Session

Path Parameters

domain
string
required
The merchant domain (e.g., “staging.luma.gift”)

Request Body

encrypted_card
string
required
JWE-encrypted credit card data using the public key from Get Public Key endpoint
billing_info
object
required
Billing address informationRequired fields:
  • first_name (string): Customer’s first name
  • last_name (string): Customer’s last name
  • email (string): Email address
  • phone (string): Phone number
  • address1 (string): Primary address line
  • city (string): City name
  • state_or_province (string): State/province code
  • country (string): Country name or code
  • postal_code (string): ZIP or postal code
Optional fields:
  • address2 (string): Secondary address line
  • company (string): Company name
captcha_token
string
Captcha verification token when required by merchant

Response

Returns an order confirmation object with:
platform_order_number
string
The order number from the merchant
cart_id
string
Unique identifier for the cart
line_items
array
Array of items in the order
total
object
Final order total with currency information
shipping_info
object
Delivery address details
shipping_method
object
Selected shipping option with pricing

Credit Card Encryption

The credit card must be encrypted as a JWE token with the following structure:
{
  "number": "4111111111111111",
  "name": "John Smith",
  "verification_value": "123",
  "month": "08",
  "year": "2025"
}

Code Example

// 1. Get public key
const keyResponse = await fetch('https://cc.firmly.work/api/v1/payment/key');
const publicKey = await keyResponse.json();

// 2. Encrypt card data (using jose or similar library)
const encryptedCard = await encryptCardData(cardData, publicKey);

// 3. Complete order
const response = await fetch('https://cc.firmly.work/api/v1/payment/domains/staging.luma.gift/complete-order', {
  method: 'POST',
  headers: {
    'x-firmly-authorization': authToken,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    encrypted_card: encryptedCard,
    billing_info: {
      first_name: 'John',
      last_name: 'Smith',
      email: '[email protected]',
      phone: '2065551212',
      address1: '123 Main St',
      city: 'Seattle',
      state_or_province: 'WA',
      country: 'US',
      postal_code: '98101'
    }
  })
});

const order = await response.json();

Prerequisites

Before calling this endpoint:
  1. Cart must have at least one item
  2. Shipping information must be set
  3. Shipping method must be selected

Error Responses

CodeDescription
ErrorInvalidInputBodyRequest validation failed
ErrorMissingRequiredParametersCart missing required data
ErrorCartNotFoundNo cart found for domain
ErrorPaymentDeclinedPayment was declined
ErrorStoreUnavailableMerchant temporarily unavailable