Overview
Completes the checkout process by placing an order with the merchant. This endpoint requires an existing cart with items and shipping information.
Authentication
Device authentication token from Browser Session
Path Parameters
The merchant domain (e.g., “staging.luma.gift”)
Request Body
JWE-encrypted credit card data using the public key from Get Public Key endpoint
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 verification token when required by merchant
Response
Returns an order confirmation object with:
The order number from the merchant
Unique identifier for the cart
Array of items in the order
Final order total with currency information
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:
- Cart must have at least one item
- Shipping information must be set
- Shipping method must be selected
Error Responses
| Code | Description |
|---|
ErrorInvalidInputBody | Request validation failed |
ErrorMissingRequiredParameters | Cart missing required data |
ErrorCartNotFound | No cart found for domain |
ErrorPaymentDeclined | Payment was declined |
ErrorStoreUnavailable | Merchant temporarily unavailable |