Skip to content

Report checkouts left without an order, with their consent and recovery link

POST
/api/v1/workspaces/{workspace}/woocommerce/checkouts
curl --request POST \
--url https://reputecast.example.com/api/v1/workspaces/acme-newsletter/woocommerce/checkouts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "checkouts": [ { "accepted": true, "clickToken": "example", "completedAt": "2026-04-15T12:00:00Z", "consentAt": "2026-04-15T12:00:00Z", "consentText": "example", "createdAt": "2026-04-15T12:00:00Z", "currency": "example", "email": "example", "firstName": "example", "items": [ { "imageUrl": "example", "price": "example", "productId": "example", "quantity": 1, "title": "example", "variant": "example", "variantId": "example" } ], "lastName": "example", "recoveryUrl": "example", "subtotal": "example", "token": "example", "total": "example", "updatedAt": "2026-04-15T12:00:00Z" } ], "siteUrl": "https://store.example.com" }'

Permission: none

Keys: only a WordPress site’s key can call this operation.

The ReputeCast WordPress plugin calls this with its site’s key. Only checkouts of the WooCommerce store connected at the site’s address count.

workspace
required

Workspace slug

string
/^[a-z0-9][a-z0-9-]{1,62}$/

Workspace slug

Media typeapplication/json
object
checkouts
required
Array<object>
<= 200 items
object
accepted
required
boolean
clickToken
string
<= 200 characters
completedAt

When it became an order

string format: date-time
consentAt
string format: date-time
consentText
string
<= 500 characters
createdAt
required
string format: date-time
currency
required
string
<= 3 characters
email
string
<= 254 characters
firstName
string
<= 100 characters
items
required
Array<object>
<= 100 items
object
imageUrl
string
<= 1000 characters
price
required

The unit price, a decimal string

string
<= 20 characters
productId
required
string
<= 40 characters
quantity
required
integer format: int64
<= 100000
title
required
string
<= 300 characters
variant
string
<= 200 characters
variantId
string
<= 40 characters
lastName
string
<= 100 characters
recoveryUrl
required
string
<= 1000 characters
subtotal
required
string
<= 20 characters
token
required

The plugin’s checkout token

string
>= 8 characters <= 64 characters
total
required
string
<= 20 characters
updatedAt
required
string format: date-time
siteUrl
required
string
<= 300 characters

OK

Media typeapplication/json
object
accepted
required
integer format: int64
ignored
required
integer format: int64
store
required

The store’s name

string

Example generated

{
"accepted": 1,
"ignored": 1,
"store": "example"
}

Error

Media typeapplication/problem+json
object
code

Stable error code, e.g. permission_denied

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object>
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

helpers

Members who hold the missing permission

Array<string>
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
meta
object
key
additional properties
permission

The missing permission key

string
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank

Example

{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}