Introduction

Welcome to the GoEscrow Partner API Documentation for E-Commerce Retailers and Marketplace operators.

This documentation aims to provide all the information you need to work with our API.

You may find the partner application, additional support documentation and whitepaper for the GoEscrow Partner API here.

Idempotency

State-changing requests can be safely retried without performing the operation twice by sending an Idempotency-Key header. We strongly recommend using it on every money-movement request, so that a network timeout or a retry never results in a duplicate transaction.

How to use it

  • Generate a unique value for each distinct operation (a UUID v4 is ideal) and send it as the Idempotency-Key request header.
  • If you repeat a request with the same key and the same body, the API returns the original response instead of performing the operation again. Replayed responses carry an Idempotent-Replayed: true header.
  • Keys are scoped to your partner account and remembered for 24 hours. After that window the same value may be reused for a new operation.

Status codes you may receive

  • 409 Conflict — a request with the same key is still being processed. Wait a moment and retry.
  • 422 Unprocessable Entity — the key was already used with a different request body. Use a new key for a different operation.

Notes

  • Only successful (2xx) responses are remembered. If a request fails, the key is released so you can safely retry it with the same key.
  • Reuse the same key only when retrying the same operation; use a fresh key for every new operation.

Idempotency keys are honoured on: create transaction, settle transaction, request cancellation, PayTo payment, and create dispute.

Authenticating requests

To authenticate requests, include a X-API-Key header with the value "{YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

To connect via API authentication is required.

Contact your GoEscrow account manager for a one time use URL token to create your X-API-Key. Send that specific X-API-Key in a custom header (replacing '123456789abcdef') as follows:

POST /v1/transactions HTTP/1.1
Host: partners.goescrow.net
X-API-Key: 123456789abcdef
Content-Type: application/json
Accept: application/json

System

GET api/v1/healthcheck

GET
https://partners.staging.goescrow.net
/api/v1/healthcheck
requires authentication

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/healthcheck" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:

Company Management

Manage Companies

Lookup a company by ABN

GET
https://partners.staging.goescrow.net
/api/v1/companies/lookup
requires authentication

Looks up an existing company by Australian Business Number. Access is limited to companies represented by a user belonging to the authenticated partner, unless using an internal API key.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

abn
string
required

The Australian Business Number. Formatting spaces are accepted.

Example:
40 650 703 736

Response Fields

Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/companies/lookup?abn=40+650+703+736" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "reference": "ABC123",
        "name": "Acme Corp Pty Ltd",
        "abn": "40650703736",
        "acn": "004085616",
        "kyb_verified": true,
        "aml_verified": true,
        "aml_verified_at": "2026-06-25T00:00:00.000000Z",
        "bank_verified": true,
        "abr_status": "Active",
        "representatives": [
            {
                "id": "9d2e5c8a-1234-5678-9abc-def012345679",
                "reference": "ABC123",
                "name": "Jane Doe"
            }
        ]
    }
}
{
    "message": "Company not found or access denied."
}

Create a new company

POST
https://partners.staging.goescrow.net
/api/v1/companies
requires authentication

Creates a new company and attaches one or more existing users as its representatives.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/companies" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Acme Corp Pty Ltd\",
    \"abn\": \"40650703736\",
    \"acn\": \"004085616\",
    \"email\": \"info@acmecorp.com.au\",
    \"phone\": \"+61298765432\",
    \"website\": \"https:\\/\\/www.acmecorp.com.au\",
    \"type\": \"Proprietary Limited\",
    \"majority_owned_by_another_australian_company\": false,
    \"majority_owned_by_overseas_person_or_company\": false,
    \"majority_owned_by_listed_australian_company\": false,
    \"acting_as_trustee_for_a_trust\": false,
    \"representatives\": [
        \"9d2e5c8a-1234-5678-9abc-def012345678\"
    ],
    \"address\": {
        \"unit_number\": \"3\",
        \"street_number\": \"20\",
        \"street\": \"Company Street\",
        \"suburb\": \"Melbourne\",
        \"state\": \"VIC\",
        \"postcode\": \"3000\",
        \"country\": \"Australia\"
    }
}"
Example response:
{
    "data": {
        "id": "comp_123",
        "reference": "ABC123",
        "name": "Acme Corp Pty Ltd",
        "abn": "40650703736",
        "acn": "004085616",
        "kyb_verified": true,
        "aml_verified": true,
        "aml_verified_at": "2026-06-25T00:00:00.000000Z",
        "bank_verified": true,
        "abr_status": "Active",
        "representatives": [
            {
                "id": "9d2e5c8a-1234-5678-9abc-def012345678",
                "reference": "ABC123",
                "name": "Jane Doe"
            }
        ]
    }
}

Update a company

PUT
PATCH
https://partners.staging.goescrow.net
/api/v1/companies/{id}
requires authentication

Updates an existing company. Only provided fields will be updated. ABN must be omitted, even when unchanged; create a new company for a different ABN.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

company_id
string
required

The company UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://partners.staging.goescrow.net/api/v1/companies/1" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Acme Corp Pty Ltd\",
    \"acn\": \"004085616\",
    \"email\": \"info@acmecorp.com.au\",
    \"phone\": \"+61298765432\",
    \"website\": \"https:\\/\\/www.acmecorp.com.au\",
    \"type\": \"Proprietary Limited\",
    \"majority_owned_by_another_australian_company\": false,
    \"majority_owned_by_overseas_person_or_company\": false,
    \"majority_owned_by_listed_australian_company\": false,
    \"acting_as_trustee_for_a_trust\": false,
    \"add_representatives\": [
        \"9d2e5c8a-1234-5678-9abc-def012345678\"
    ],
    \"remove_representatives\": [
        \"9d2e5c8a-1234-5678-9abc-def012345679\"
    ],
    \"address\": {
        \"unit_number\": \"3\",
        \"street_number\": \"20\",
        \"street\": \"Company Street\",
        \"suburb\": \"Melbourne\",
        \"state\": \"VIC\",
        \"postcode\": \"3000\",
        \"country\": \"Australia\"
    }
}"
Example response:
{
    "data": {
        "id": "comp_123",
        "reference": "ABC123",
        "name": "Acme Corp Pty Ltd",
        "abn": "40650703736",
        "acn": "004085616",
        "kyb_verified": true,
        "aml_verified": true,
        "aml_verified_at": "2026-06-25T00:00:00.000000Z",
        "bank_verified": true,
        "abr_status": "Active",
        "representatives": [
            {
                "id": "9d2e5c8a-1234-5678-9abc-def012345678",
                "reference": "ABC123",
                "name": "Jane Doe"
            }
        ]
    }
}

Upload company files

POST
https://partners.staging.goescrow.net
/api/v1/companies/{company_id}/files
requires authentication

Uploads one or more files to a company filing cabinet. The authenticated partner must represent the company.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
multipart/form-data
Accept
Example:
application/json

URL Parameters

company_id
string
required

The company UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/companies/9d2e5c8a-1234-5678-9abc-def012345678/files" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "files[]=@/tmp/phpq49sfpgbkkildILogIl" 
Example response:
{
    "data": [
        {
            "id": "9d2e5c8a-1234-5678-9abc-def012345678",
            "file": "a1b2c3d4/document.pdf",
            "filename": "document.pdf",
            "created_at": "2024-01-15T10:30:00Z"
        }
    ]
}
{
    "message": "Company not found or access denied."
}

User Management

Manage Users

Create a new user

POST
https://partners.staging.goescrow.net
/api/v1/users
requires authentication

Creates a new user. Email and phone must be unique. The user will be automatically associated with the authenticated partner. If the authenticated Partner has welcome emails enabled, newly created API users receive a GoEscrow Welcome By Partner email with a 24-hour, single-use password setup link.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"John\",
    \"last_name\": \"Doe\",
    \"email\": \"john.doe@example.com\",
    \"phone\": \"+61412345678\",
    \"birth_date\": \"1990-01-15\",
    \"initiate_mobile_verification_flow\": \"yes\",
    \"address\": {
        \"unit_number\": \"10B\",
        \"street_number\": \"123\",
        \"street\": \"Smith St\",
        \"suburb\": \"Sydney\",
        \"state\": \"NSW\",
        \"postcode\": \"2000\"
    }
}"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "reference": "ABC123",
        "first_name": "John",
        "last_name": "Doe",
        "email": "john.doe@example.com",
        "phone": "+61412345678",
        "birth_date": "1990-01-15",
        "kyc_verified": false,
        "aml_verified": false,
        "aml_verified_at": null,
        "email_verified": false,
        "mobile_verified": false,
        "mobilekyc_verified": false,
        "bank_verified": false,
        "suspended": false,
        "address": {
            "unit_number": "10B",
            "street_number": "123",
            "street": "Smith St",
            "suburb": "Sydney",
            "state": "NSW",
            "postcode": "2000",
            "country": "Australia"
        }
    }
}

Update a user

PUT
PATCH
https://partners.staging.goescrow.net
/api/v1/users/{id}
requires authentication

Updates an existing user for the authenticated partner. Email and phone must remain unique.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Example request:
curl --request PUT \
    "https://partners.staging.goescrow.net/api/v1/users/1" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"John\",
    \"last_name\": \"Doe\",
    \"email\": \"john.doe@example.com\",
    \"phone\": \"+61412345678\",
    \"birth_date\": \"1990-01-15\",
    \"address\": {
        \"unit_number\": \"10B\",
        \"street_number\": \"123\",
        \"street\": \"Smith St\",
        \"suburb\": \"Sydney\",
        \"state\": \"NSW\",
        \"postcode\": \"2000\"
    }
}"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "reference": "ABC123",
        "first_name": "John",
        "last_name": "Doe",
        "email": "john.doe@example.com",
        "phone": "+61412345678",
        "birth_date": "1990-01-15",
        "kyc_verified": false,
        "aml_verified": false,
        "aml_verified_at": null,
        "email_verified": false,
        "mobile_verified": false,
        "mobilekyc_verified": false,
        "bank_verified": false,
        "suspended": false,
        "address": {
            "unit_number": "10B",
            "street_number": "123",
            "street": "Smith St",
            "suburb": "Sydney",
            "state": "NSW",
            "postcode": "2000",
            "country": "Australia"
        }
    }
}

Lookup user or company

GET
https://partners.staging.goescrow.net
/api/v1/users/lookup
requires authentication

Look up an existing user by email, phone, or GoEscrow reference. Company reference matches return only the company name and reference. Exactly one parameter must be provided.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

email
string

The user's email address. Supply exactly one of email, phone, or reference.

Example:
john.doe@example.com
phone
string

The user's phone number. Supply exactly one of email, phone, or reference. Accepts 0412345678, +61412345678, or 61412345678.

Example:
+61412345678
reference
string

A user or company GoEscrow reference. Supply exactly one of email, phone, or reference.

Example:
ABC123

Response Fields

Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/lookup?email=john.doe%40example.com&phone=%2B61412345678&reference=ABC123" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "reference": "ABC123",
        "first_name": "John",
        "last_name": "Doe",
        "email": "john.doe@example.com",
        "phone": "+61412345678",
        "birth_date": "1990-01-15",
        "kyc_verified": true,
        "aml_verified": true,
        "aml_verified_at": "2026-06-25T00:00:00.000000Z",
        "email_verified": true,
        "mobile_verified": true,
        "mobilekyc_verified": true,
        "bank_verified": true,
        "suspended": false,
        "address": {
            "unit_number": "1",
            "street_number": "123",
            "street": "Main Street",
            "suburb": "Sydney",
            "state": "NSW",
            "postcode": "2000",
            "country": "Australia"
        }
    }
}
{
    "data": {
        "name": "Acme Corp Pty Ltd",
        "reference": "XYZ789"
    }
}
{
    "message": "User or company not found."
}
{
    "message": "At least one of email or phone is required."
}
{
    "message": "Please provide either email or phone, not both."
}
{
    "message": "Please provide only one of email, phone, or reference."
}

Send mobile verification code

GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/verify-mobile
requires authentication

Sends a verification code via SMS to the user's registered phone number. The code will be valid for a limited time.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/verify-mobile" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[Empty response]

Verify mobile phone

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/verify-mobile
requires authentication

Verifies the mobile phone number using the code sent via SMS. Upon successful verification, the user's phone will be marked as verified.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/verify-mobile" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"123456\"
}"
Example response:
[Empty response]

Send email verification code

GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/verify-email
requires authentication

Sends a verification code via email to the user's registered email address. The code will be valid for a limited time.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/verify-email" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[Empty response]

Verify email address

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/verify-email
requires authentication

Verifies the email address using the code sent via email. Upon successful verification, the user's email will be marked as verified.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/verify-email" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"123456\"
}"
Example response:
[Empty response]

Generate user bank statement

GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/bank-statement
requires authentication

Generates and returns a PDF bank statement for the specified user. The statement includes transaction history and account details.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/bank-statement" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[]

Upload user files

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/files
requires authentication

Uploads one or more files to a user filing cabinet. The authenticated partner must own the user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
multipart/form-data
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/files" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "files[]=@/tmp/php87mnhuep7j1gaAIfEno" 
Example response:
{
    "data": [
        {
            "id": "9d2e5c8a-1234-5678-9abc-def012345678",
            "file": "a1b2c3d4/document.pdf",
            "filename": "document.pdf",
            "created_at": "2024-01-15T10:30:00Z"
        }
    ]
}
{
    "message": "User not found or access denied."
}
POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/password-reset-link
requires authentication

Generates a short-lived password reset link for the user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/password-reset-link" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"send_email\": true
}"
Example response:

Dispute Management

Create and manage transaction disputes

Create a dispute

POST
https://partners.staging.goescrow.net
/api/v1/disputes
requires authentication

Creates a dispute for a transaction. This will mark the transaction as disputed and create a compliance note for the CS team to review.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Idempotency-Key
Example:
6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/disputes" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Idempotency-Key: 6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"requester_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"requester_role\": \"buyer\",
    \"transaction_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"request_type\": \"pause\",
    \"issue_description\": \"The goods were not delivered as described.\"
}"
Example response:
{
    "message": "Dispute created successfully.",
    "dispute_reference": "DISP-2024-001234",
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "disputed"
}
{
    "message": "Transaction status does not allow disputes."
}

Transaction Cancellation

Manage cancellation requests and approvals for partner transactions.

Multiple payees: non-marketplace Anytime and Timed transactions

A transaction with two or more disbursement entries uses per-party cancellation approval. The API derives the parties from the saved payer and disbursement recipients. Do not include a list of other parties or resend the disbursement array in cancellation requests. All calls below use the existing /api/v1/transactions/{transaction_id} endpoints.

  1. POST /cancellation-request with requester_id, the requesting user or company UUID. For a company with multiple representatives, also send representative_id, the UUID of the linked user acting for that company. Use the same representative for code delivery and verification.
  2. If requires_2fa is true, codes have been sent but the request has not yet been created. POST /verify-cancellation with the same actor details, email_code and phone_code to create it.
  3. Save the returned cancellation_request_id. Each other party POSTs /cancellation-accept with its own accepter_id, the current cancellation_request_id and, where needed, representative_id.
  4. If acceptance returns requires_2fa: true, that party POSTs /verify-cancellation-accept with the same actor details and request ID, plus email_code and phone_code.
  5. A party still requiring approval can instead POST /cancellation-deny with denier_id, the current cancellation_request_id and, where needed, representative_id. Denial does not require verification codes.

For example, an individual requests cancellation without listing the other parties:

{"requester_id": "9d2e5c8a-1234-5678-9abc-def012345678"}

After the request is created, another party accepts using the returned request ID:

{"accepter_id": "9d2e5c8a-1234-5678-9abc-def012345680", "cancellation_request_id": "2c9bb6a0-b123-4567-89ab-0123456789ab"}

The requester contributes the first approval. With one payer and two distinct payees, all three legal parties must approve; one representative acting for two companies must approve separately for each company. An HTTP 200 can mean only that one approval was recorded. The transaction remains cancellation_requested until all required approvals are complete. Check status for canceled; refund processing may still be pending.

Pending multi-payee transactions also require all parties to approve; they are not cancelled immediately. Partially or fully funded multi-payee transactions require email and phone verification for every approval, based on positive, unreversed payment receipts. If funding arrives after an unverified approval, that party must approve again with verification. Codes expire after five minutes and are bound to the transaction, legal party, representative and cancellation attempt.

A missing or stale cancellation_request_id on acceptance, acceptance verification or denial returns HTTP 422. Refresh the transaction and use the current ID; do not replay an old approval against a new request. The response ID is null before a request is created and after cancellation or denial ends it. Older active requests without a generated ID return legacy; send the returned value unchanged.

Denial normally restores the previous status. For a multi-payee Timed transaction less than 12 hours before a future release, denial instead sets contact_helpdesk, suspends payee settlements and alerts customer service.

Single-payee and marketplace transactions retain their existing cancellation flow. The multi-payee-only fields and approval rules below do not change that flow.

Request transaction cancellation

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/cancellation-request
requires authentication

Initiates cancellation. For non-marketplace multi-payee Anytime and Timed transactions, supply only the requesting party ID and, when needed, its representative ID; the API already knows the other parties. Unfunded pending or accepted transactions enter cancellation_requested with the requester approval recorded. If requires_2fa is true, call verify-cancellation to create the request. Single-payee pending transactions retain immediate cancellation; accepted transactions retain the existing counterparty flow.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Idempotency-Key
Example:
6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/cancellation-request" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Idempotency-Key: 6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"requester_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"representative_id\": \"9d2e5c8a-1234-5678-9abc-def012345679\"
}"
Example response:
{
    "message": "Cancellation requested. 2FA verification required. Codes sent to requester's email and phone.",
    "requires_2fa": true,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "accepted"
}
{
    "message": "Cancellation requested. Waiting for counterparty response.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "cancellation_requested"
}
{
    "message": "Transaction cancelled successfully.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "canceled"
}
{
    "message": "Approval recorded. Waiting for the remaining parties.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "cancellation_requested",
    "cancellation_request_id": "2c9bb6a0-b123-4567-89ab-0123456789ab"
}
{
    "message": "Verification codes sent. Verify them to record this party’s approval.",
    "requires_2fa": true,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "accepted",
    "cancellation_request_id": null
}

Verify cancellation request 2FA codes

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/verify-cancellation
requires authentication

Verifies requester codes and creates the cancellation request. For multi-payee transactions, this records only the requester approval and returns cancellation_request_id for the remaining parties. Use the same requester_id and representative_id as the code-delivery call. No cancellation_request_id is needed to create the request.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/verify-cancellation" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"requester_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"email_code\": \"123456\",
    \"phone_code\": \"654321\",
    \"representative_id\": \"9d2e5c8a-1234-5678-9abc-def012345679\"
}"
Example response:
{
    "message": "Cancellation requested. Waiting for counterparty response.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "cancellation_requested"
}
{
    "message": "Approval recorded. Waiting for the remaining parties.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "cancellation_requested",
    "cancellation_request_id": "2c9bb6a0-b123-4567-89ab-0123456789ab"
}
{
    "message": "Invalid or expired verification codes."
}

Accept transaction cancellation

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/cancellation-accept
requires authentication

Records approval from one outstanding party. Multi-payee requests require the current cancellation_request_id. If requires_2fa is true, codes were sent but approval is not yet recorded: call verify-cancellation-accept. Otherwise HTTP 200 may still have status cancellation_requested while other approvals are outstanding. Only the final required approval completes cancellation. Single-payee requests retain the existing counterparty flow.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/cancellation-accept" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"accepter_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"representative_id\": \"9d2e5c8a-1234-5678-9abc-def012345679\",
    \"cancellation_request_id\": \"2c9bb6a0-b123-4567-89ab-0123456789ab\"
}"
Example response:
{
    "message": "Cancellation acceptance requires 2FA verification. Codes sent to accepter's email and phone.",
    "requires_2fa": true,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "cancellation_requested"
}
{
    "message": "Cancellation accepted. Transaction cancelled successfully.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "canceled"
}
{
    "message": "Approval recorded. Waiting for the remaining parties.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "cancellation_requested",
    "cancellation_request_id": "2c9bb6a0-b123-4567-89ab-0123456789ab"
}
{
    "message": "Verification codes sent. Verify them to record this party’s approval.",
    "requires_2fa": true,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "cancellation_requested",
    "cancellation_request_id": "2c9bb6a0-b123-4567-89ab-0123456789ab"
}
{
    "message": "All parties approved. Transaction cancelled.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "canceled",
    "cancellation_request_id": null
}
{
    "message": "The cancellation request has changed. Refresh the transaction and try again.",
    "errors": {
        "cancellation_request_id": [
            "The cancellation request has changed. Refresh the transaction and try again."
        ]
    }
}

Verify cancellation acceptance 2FA codes

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/verify-cancellation-accept
requires authentication

Verifies one party approval using email_code and phone_code. For multi-payee transactions, include the current cancellation_request_id and use the same accepter_id and representative_id as the code-delivery call. Cancellation remains pending until the payer and every payee have approved with any required verification.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/verify-cancellation-accept" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"accepter_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"email_code\": \"123456\",
    \"phone_code\": \"654321\",
    \"representative_id\": \"9d2e5c8a-1234-5678-9abc-def012345679\",
    \"cancellation_request_id\": \"2c9bb6a0-b123-4567-89ab-0123456789ab\"
}"
Example response:
{
    "message": "Cancellation accepted. Transaction cancelled successfully.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "canceled"
}
{
    "message": "Approval recorded. Waiting for the remaining parties.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "cancellation_requested",
    "cancellation_request_id": "2c9bb6a0-b123-4567-89ab-0123456789ab"
}
{
    "message": "All parties approved. Transaction cancelled.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "canceled",
    "cancellation_request_id": null
}
{
    "message": "Invalid or expired verification codes."
}
{
    "message": "The cancellation request has changed. Refresh the transaction and try again.",
    "errors": {
        "cancellation_request_id": [
            "The cancellation request has changed. Refresh the transaction and try again."
        ]
    }
}

Deny transaction cancellation

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/cancellation-deny
requires authentication

Denies an active cancellation request without verification codes. For multi-payee transactions, only a party still requiring approval may deny; supply the current cancellation_request_id. Normally restores the previous status. Within 12 hours before a future Timed release, multi-payee denial instead sets contact_helpdesk, suspends payee settlements and alerts customer service. Single-payee requests retain their existing denial flow.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/cancellation-deny" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"denier_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"representative_id\": \"9d2e5c8a-1234-5678-9abc-def012345679\",
    \"cancellation_request_id\": \"2c9bb6a0-b123-4567-89ab-0123456789ab\"
}"
Example response:
{
    "message": "Cancellation denied. Transaction reverted to active status.",
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "accepted"
}
{
    "message": "Cancellation denied. Transaction is active again.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "accepted",
    "cancellation_request_id": null
}
{
    "message": "Transaction under review. CS Team has been notified.",
    "requires_2fa": false,
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "contact_helpdesk",
    "cancellation_request_id": null
}
{
    "message": "The cancellation request has changed. Refresh the transaction and try again.",
    "errors": {
        "cancellation_request_id": [
            "The cancellation request has changed. Refresh the transaction and try again."
        ]
    }
}

Transaction Management

Manage Transactions

Create transaction

POST
https://partners.staging.goescrow.net
/api/v1/transactions
requires authentication

Creates a new escrow transaction with disbursements. Partner API transactions are auto-accepted (skip pending status).

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Idempotency-Key
Example:
6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Idempotency-Key: 6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"action\": \"buy\",
    \"type\": \"anytime_escrow\",
    \"amount_type\": \"escrow\",
    \"other_user\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"other_company_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"sub_type\": \"marketplace\",
    \"user_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"company_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"marketplace_operator_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"release_at\": \"2024-12-31T23:59:59Z\",
    \"details\": \"Dental Surgery\",
    \"amount\": 15000050,
    \"disbursements\": [
        \"fugit\"
    ],
    \"beneficiaries\": [
        {
            \"first_name\": \"Greg\",
            \"last_name\": \"Recipient\",
            \"mobile\": \"+61400000001\",
            \"required\": true
        }
    ]
}"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "reference": "TXN-2024-001234",
        "type": "anytime_escrow",
        "sub_type": "marketplace",
        "status": "accepted",
        "funding_status": "pending",
        "amount": 150000.5,
        "details": "Property settlement for 123 Main St",
        "created_at": "2024-01-15T10:30:00Z",
        "beneficiaries": [
            {
                "id": "9d2e5c8a-1234-5678-9abc-def012345679",
                "first_name": "G**g",
                "last_name": "R*******t",
                "mobile": "+61******001",
                "required": true,
                "status": "pending"
            }
        ]
    }
}
{
    "message": "This company is not currently eligible to transact.",
    "errors": {
        "company_id": [
            "This company is not currently eligible to transact."
        ]
    }
}

Get transaction status by identifier

GET
https://partners.staging.goescrow.net
/api/v1/transactions/status
requires authentication

Returns full transaction details including funding information. Provide exactly one of transaction_id or reference_id. Requires party_id to verify access.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

transaction_id
string

The transaction UUID (36-character internal identifier). Required when reference_id is not provided. Must not be provided with reference_id.

Example:
9d2e5c8a-1234-5678-9abc-def012345678
reference_id
string

The transaction reference number. Required when transaction_id is not provided. Must not be provided with transaction_id.

Example:
TXN-2024-001234
party_id
string
required

The ID of the buyer, seller, or disbursement recipient to verify access

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/transactions/status?transaction_id=9d2e5c8a-1234-5678-9abc-def012345678&reference_id=TXN-2024-001234&party_id=9d2e5c8a-1234-5678-9abc-def012345678" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"transaction_id\": \"4b3f9a1c-0e69-32e3-90a4-369d7ca4699f\",
    \"reference_id\": \"et\",
    \"party_id\": \"609298a8-62fe-3779-9328-1ed7e3ca5d01\"
}"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "reference": "TXN-2024-001234",
        "type": "anytime_escrow",
        "sub_type": "marketplace",
        "status": "accepted",
        "funding_status": "pending",
        "amount": 150000.5,
        "fee": 1500,
        "amount_with_fee": 151500.5,
        "details": "Property settlement",
        "release_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "buyer_id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "buyer_reference": "ABC123",
        "seller_id": "9d2e5c8a-1234-5678-9abc-def012345679",
        "seller_reference": "XYZ789",
        "other_party_hint": "J*** D***",
        "funding_details": {
            "bsb": "123456",
            "account_number": "12345678",
            "account_name": "GoEscrow Trust",
            "pay_id": "pay@goescrow.com.au",
            "reference": "TXN-2024-001234",
            "rail": "azupay",
            "account_scope": "transaction",
            "payment_reference": "TXN-2024-001234",
            "reference_required": false,
            "provisioning_status": "ready",
            "amount_received": "0.00",
            "amount_outstanding": "151500.50"
        }
    }
}

Get transaction status

GET
https://partners.staging.goescrow.net
/api/v1/transactions/{id}
requires authentication

Returns full transaction details including funding information. Requires party_id to verify access.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Query Parameters

party_id
string
required

The ID of the buyer or seller to verify access

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Response Fields

Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/transactions/1?party_id=9d2e5c8a-1234-5678-9abc-def012345678" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "reference": "TXN-2024-001234",
        "type": "anytime_escrow",
        "sub_type": "marketplace",
        "status": "accepted",
        "funding_status": "pending",
        "amount": 150000.5,
        "fee": 1500,
        "amount_with_fee": 151500.5,
        "details": "Property settlement",
        "release_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "buyer_id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "buyer_reference": "ABC123",
        "seller_id": "9d2e5c8a-1234-5678-9abc-def012345679",
        "seller_reference": "XYZ789",
        "other_party_hint": "J*** D***",
        "funding_details": {
            "bsb": "123456",
            "account_number": "12345678",
            "account_name": "GoEscrow Trust",
            "pay_id": "pay@goescrow.com.au",
            "reference": "TXN-2024-001234",
            "rail": "azupay",
            "account_scope": "transaction",
            "payment_reference": "TXN-2024-001234",
            "reference_required": false,
            "provisioning_status": "ready",
            "amount_received": "0.00",
            "amount_outstanding": "151500.50"
        }
    }
}

Request beneficiary confirmation

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/beneficiaries/{beneficiary_id}/confirmation-request
requires authentication

Creates or rotates a single-use beneficiary confirmation link and sends it by SMS to the beneficiary. The token and confirmation URL are not returned to the partner.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction
string
required

The transaction UUID

Example:
ut
beneficiary
string
required

The beneficiary UUID

Example:
et

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/1/beneficiaries/1/confirmation-request" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"heading\": \"Confirm your session\"
}"
Example response:
{
    "data": {
        "message": "Confirmation link sent",
        "beneficiary_id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "sent_to": "+614****5678",
        "expires_at": "2026-08-16T12:00:00+00:00",
        "heading": "Confirm receipt"
    }
}

Get transaction quote

POST
https://partners.staging.goescrow.net
/api/v1/transactions/quote
requires authentication

Calculates fees and provides a quote for a transaction without creating it. Uses the same request structure as transaction creation. This allows partners to show pricing to their customers before committing to a transaction.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/quote" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"action\": \"buy\",
    \"type\": \"anytime_escrow\",
    \"amount_type\": \"escrow\",
    \"other_user\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"other_company_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"sub_type\": \"super_disbursement\",
    \"user_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"company_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"release_at\": \"2024-12-31T23:59:59Z\",
    \"details\": \"Dental Surgery\",
    \"amount\": 15000050,
    \"disbursements\": [
        \"adipisci\"
    ]
}"
Example response:
{
    "data": {
        "sub_type": "super_disbursement",
        "amount": 150000.5,
        "partner_fee": 299.4,
        "partner_fee_percentage": 0.2,
        "goescrow_fee": 0,
        "goescrow_fee_percentage": 0,
        "total_fees": 299.4,
        "net_amount": 149701.1,
        "disbursements_count": 2,
        "disbursements": [
            {
                "user_id": "9d2e5c8a-1234-5678-9abc-def012345679",
                "amount": 74850.55
            },
            {
                "company_id": "9d2e5c8a-1234-5678-9abc-def012345680",
                "amount": 74850.55
            }
        ]
    }
}

Upload transaction files

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/files
requires authentication

Uploads one or more files to a transaction filing cabinet. The authenticated partner must own the transaction or be its marketplace operator.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
multipart/form-data
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/files" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "files[]=@/tmp/php1o66eobt7j4l2IaBanK" 
Example response:
{
    "data": [
        {
            "id": "9d2e5c8a-1234-5678-9abc-def012345678",
            "file": "a1b2c3d4/document.pdf",
            "filename": "document.pdf",
            "created_at": "2024-01-15T10:30:00Z"
        }
    ]
}
{
    "message": "Transaction not found or access denied."
}

Trigger marketplace settlement

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/settle
requires authentication

Triggers settlement for a marketplace escrow transaction. Only the marketplace operator can trigger settlement.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Idempotency-Key
Example:
6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/settle" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Idempotency-Key: 6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"buyer_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\",
    \"seller_id\": \"9d2e5c8a-1234-5678-9abc-def012345679\",
    \"settlement_amount\": 150000.5
}"
Example response:
{
    "message": "Settlement initiated successfully.",
    "transaction_id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "status": "settlement_in_progress"
}
{
    "message": "Only the marketplace operator can trigger settlement."
}
{
    "message": "Only marketplace escrow transactions can be settled via API."
}

Transaction PayTo Payment

Initiate PayTo Payments for Transactions

Initiate PayTo payment

POST
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/payto-payment
requires authentication

Initiates a PayTo debit payment from the specified user's bank account to fund the transaction. The user must have an active PayTo agreement. This endpoint dispatches an async job and returns immediately with a tracking ID.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Idempotency-Key
Example:
6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/payto-payment" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Idempotency-Key: 6f3a8e1c-9b2d-4f5a-8c1e-2a7b9d0e1f23" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"9d2e5c8a-1234-5678-9abc-def012345678\"
}"
Example response:
{
    "code": "accepted",
    "message": "Payment initiation queued. Use the tracking_id to poll for status.",
    "tracking_id": "payto_9d2e5c8a"
}
{
    "code": "transaction_already_funded",
    "message": "This transaction is already funded."
}
{
    "code": "no_payment_agreement",
    "message": "User does not have a PayTo agreement set up."
}

Check PayTo payment status

GET
https://partners.staging.goescrow.net
/api/v1/transactions/{transaction_id}/payto-payment/{id}
requires authentication

Checks the status of a PayTo payment using either a tracking_id (from async initiation) or a payment_initiation_id (from Azupay).

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

transaction_id
string
required

The transaction UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
id
string
required

Either a tracking_id (e.g., payto_abc123) or an Azupay payment_initiation_id (e.g., PI-123456789)

Example:
payto_abc123

Response Fields

Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/transactions/9d2e5c8a-1234-5678-9abc-def012345678/payto-payment/payto_abc123" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "code": "settled",
    "message": "Payment settled successfully. Transaction is now funded.",
    "status": "settled"
}
{
    "code": "pending",
    "message": "Payment is still processing.",
    "status": "pending"
}
{
    "code": "failed",
    "message": "Payment was rejected.",
    "status": "failed"
}
{
    "code": "queued",
    "message": "Payment initiation is queued for processing.",
    "status": "queued"
}

User Bank Account Management

Manage User Bank Accounts

Update user bank account

PUT
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/bank-account
requires authentication

Updates the bank account details for a user. This will automatically trigger a verification payout of $0.01 to the new account with a 6-digit verification code in the transaction description.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/bank-account" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"bsb_number\": \"123456\",
    \"account_number\": \"12345678\",
    \"account_name\": \"John Doe\"
}"
Example response:

Verify user bank account

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/bank-account/verify
requires authentication

Verifies the bank account using the 6-digit code received in the $0.01 verification payout.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/bank-account/verify" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"123456\"
}"
Example response:

User Identification Management

Manage User Identification Documents

Create or update user passport

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/passport
requires authentication

Creates a new passport record for the user or updates an existing one. Only one passport per user is allowed.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/passport" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"document_number\": \"N1234567\",
    \"first_name\": \"John\",
    \"last_name\": \"Doe\",
    \"middle_name\": \"Michael\",
    \"issuing_country\": \"United Kingdom\",
    \"nationality\": \"British\",
    \"date_of_birth\": \"1990-01-15\",
    \"date_of_issue\": \"2020-01-15\",
    \"date_of_expiration\": \"2030-01-15\",
    \"place_of_birth\": \"Sydney, Australia\",
    \"gender\": \"M\"
}"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "document_number": "N1234567",
        "first_name": "John",
        "last_name": "Doe",
        "middle_name": "Michael",
        "nationality": "United Kingdom",
        "issuing_country": "United Kingdom",
        "date_of_birth": "1990-01-15",
        "date_of_issue": "2020-01-15",
        "date_of_expiration": "2030-01-15",
        "place_of_birth": "Sydney, Australia",
        "gender": "M",
        "rapidid_verification_requested_at": null,
        "rapidid_verified_at": null,
        "rapidid_failed_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
    }
}

Get user passport

GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/passport
requires authentication

Retrieves the passport information for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/passport" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "document_number": "N1234567",
        "first_name": "John",
        "last_name": "Doe",
        "middle_name": "Michael",
        "nationality": "United Kingdom",
        "issuing_country": "United Kingdom",
        "date_of_birth": "1990-01-15",
        "date_of_issue": "2020-01-15",
        "date_of_expiration": "2030-01-15",
        "place_of_birth": "Sydney, Australia",
        "gender": "M",
        "rapidid_verification_requested_at": null,
        "rapidid_verified_at": null,
        "rapidid_failed_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
    }
}
{
    "error": "Passport not found for this user."
}

Delete user passport

DELETE
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/passport
requires authentication

Deletes the passport record for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request DELETE \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/passport" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[Empty response]
{
    "error": "Passport not found for this user."
}

Create or update user Medicare card

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/medicare
requires authentication

Creates a new Medicare card record for the user or updates an existing one. Only one Medicare card per user is allowed.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/medicare" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"document_number\": \"1234567890\",
    \"name_on_card\": \"John Michael Doe\",
    \"card_color\": \"green\",
    \"individual_reference_number\": \"1\",
    \"expiration_date\": \"2025-12\"
}"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "document_number": "1234567890",
        "name_on_card": "John Michael Doe",
        "card_color": "green",
        "individual_reference_number": "1",
        "expiration_date": "2025-12",
        "rapidid_verification_requested_at": null,
        "rapidid_verified_at": null,
        "rapidid_failed_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
    }
}

Get user Medicare card

GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/medicare
requires authentication

Retrieves the Medicare card information for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/medicare" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "document_number": "1234567890",
        "name_on_card": "John Michael Doe",
        "card_color": "green",
        "individual_reference_number": "1",
        "expiration_date": "2025-12",
        "rapidid_verification_requested_at": null,
        "rapidid_verified_at": null,
        "rapidid_failed_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
    }
}
{
    "error": "Medicare card not found for this user."
}

Delete user Medicare card

DELETE
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/medicare
requires authentication

Deletes the Medicare card record for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request DELETE \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/medicare" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[Empty response]
{
    "error": "Medicare card not found for this user."
}

Create or update user driver license

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/driver-license
requires authentication

Creates a new driver license record for the user or updates an existing one. Only one driver license per user is allowed.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/driver-license" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"state_issued\": \"NSW\",
    \"license_number\": \"12345678\",
    \"card_number\": \"1234567890\",
    \"expiration_date\": \"2030-01-15\",
    \"first_name\": \"John\",
    \"last_name\": \"Doe\",
    \"middle_name\": \"Michael\",
    \"date_of_birth\": \"1990-01-15\"
}"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "state_issued": "NSW",
        "license_number": "12345678",
        "card_number": "1234567890",
        "expiration_date": "2030-01-15",
        "first_name": "John",
        "last_name": "Doe",
        "middle_name": "Michael",
        "date_of_birth": "1990-01-15",
        "rapidid_verification_requested_at": null,
        "rapidid_verified_at": null,
        "rapidid_failed_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
    }
}

Get user driver license

GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/driver-license
requires authentication

Retrieves the driver license information for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/driver-license" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "state_issued": "NSW",
        "license_number": "12345678",
        "card_number": "1234567890",
        "expiration_date": "2030-01-15",
        "first_name": "John",
        "last_name": "Doe",
        "middle_name": "Michael",
        "date_of_birth": "1990-01-15",
        "rapidid_verification_requested_at": null,
        "rapidid_verified_at": null,
        "rapidid_failed_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
    }
}
{
    "error": "Driver license not found for this user."
}

Delete user driver license

DELETE
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/driver-license
requires authentication

Deletes the driver license record for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request DELETE \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/driver-license" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[Empty response]
{
    "error": "Driver license not found for this user."
}

Create or update user immigration card

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/immigration-card
requires authentication

Creates a new immigration card record for the user or updates an existing one. Only one immigration card per user is allowed.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/immigration-card" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"given_name\": \"John\",
    \"family_name\": \"Doe\",
    \"card_number\": \"IMM123456\",
    \"expiration_date\": \"2030-01-15\",
    \"card_type\": \"ams\",
    \"vevo_check_given_name\": \"John\",
    \"vevo_check_family_name\": \"Doe\",
    \"vevo_check_passport_number\": \"N1234567\",
    \"vevo_check_country_of_issue\": \"Australia\"
}"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "given_name": "John",
        "family_name": "Doe",
        "card_number": "IMM123456",
        "expiration_date": "2030-01-15",
        "card_type": "ams",
        "vevo_check_given_name": "John",
        "vevo_check_family_name": "Doe",
        "vevo_check_passport_number": "N1234567",
        "vevo_check_country_of_issue": "Australia",
        "rapidid_verification_requested_at": null,
        "rapidid_verified_at": null,
        "rapidid_failed_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
    }
}

Get user immigration card

GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/immigration-card
requires authentication

Retrieves the immigration card information for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/immigration-card" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": {
        "id": "9d2e5c8a-1234-5678-9abc-def012345678",
        "given_name": "John",
        "family_name": "Doe",
        "card_number": "IMM123456",
        "expiration_date": "2030-01-15",
        "card_type": "ams",
        "vevo_check_given_name": "John",
        "vevo_check_family_name": "Doe",
        "vevo_check_passport_number": "N1234567",
        "vevo_check_country_of_issue": "Australia",
        "rapidid_verification_requested_at": null,
        "rapidid_verified_at": null,
        "rapidid_failed_at": null,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
    }
}
{
    "error": "Immigration card not found for this user."
}

Delete user immigration card

DELETE
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/immigration-card
requires authentication

Deletes the immigration card record for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request DELETE \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/immigration-card" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
[Empty response]
{
    "error": "Immigration card not found for this user."
}
POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/centrelink-card
requires authentication

Creates a new Centrelink card record for the user or updates an existing one. Only one Centrelink card per user is allowed.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/centrelink-card" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"crn\": \"123456789A\",
    \"name_on_card\": \"John Doe\",
    \"expiration_date\": \"2030-01-15\",
    \"card_type\": \"hcc\"
}"
Example response:
GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/centrelink-card
requires authentication

Retrieves the Centrelink card information for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/centrelink-card" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
DELETE
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/centrelink-card
requires authentication

Deletes the Centrelink card record for the specified user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678
Example request:
curl --request DELETE \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/centrelink-card" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:

User PayTo Agreement Management

Manage User PayTo Agreements

Get PayTo agreement status

GET
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/payto-agreement
requires authentication

Returns the current PayTo agreement status and details for a user.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Response Fields

Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/payto-agreement" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "has_agreement": true,
    "agreement_id": "PA-123456",
    "maximum_amount": 10000,
    "status": "ACTIVE"
}
{
    "has_agreement": false,
    "agreement_id": null,
    "maximum_amount": null,
    "status": null
}

Create PayTo agreement

POST
https://partners.staging.goescrow.net
/api/v1/users/{user_id}/payto-agreement
requires authentication

Creates a new PayTo agreement for the user. The user must authorize the agreement in their banking app.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The user UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/users/9d2e5c8a-1234-5678-9abc-def012345678/payto-agreement" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"maximum_amount\": 5000,
    \"pay_id\": \"john@example.com\",
    \"pay_id_type\": \"EMAIL\",
    \"account_name\": \"John Doe\",
    \"account_number\": \"12345678\",
    \"bsb\": \"123456\"
}"
Example response:
{
    "agreement_id": "PA-123456",
    "status": "CREATED",
    "message": "PayTo agreement created. User must authorize in their banking app."
}

Webhook Management

Manage webhook subscriptions for transaction events

List webhooks

GET
https://partners.staging.goescrow.net
/api/v1/webhooks
requires authentication

Returns all registered webhooks for the authenticated partner.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Response Fields

Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/webhooks" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": "9d2e5c8a-1234-5678-9abc-def012345678",
            "url": "https://partner.com/webhooks/goescrow",
            "events": [
                "transaction.created",
                "transaction.clearance_pending",
                "transaction.funded",
                "transaction.status_changed",
                "transaction.funding_status_changed"
            ],
            "is_active": true,
            "last_triggered_at": "2024-01-15T10:30:00Z",
            "failure_count": 0,
            "created_at": "2024-01-01T00:00:00Z"
        }
    ]
}

Register webhook

POST
https://partners.staging.goescrow.net
/api/v1/webhooks
requires authentication

Registers a new webhook URL to receive transaction event notifications. Available events: transaction.created (when a transaction is created), transaction.clearance_pending (when inbound funding is held for clearance), transaction.funded (when a transaction is funded), transaction.status_changed (when transaction status changes), transaction.funding_status_changed (when transaction funding status changes), transaction.completed (when a transaction is completed/settled), beneficiary.confirmation_requested (when beneficiary confirmation is requested), beneficiary.confirmed (when a beneficiary confirms receipt), beneficiary.declined (when a beneficiary reports non-receipt).

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/webhooks" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"https:\\/\\/partner.com\\/webhooks\\/goescrow\",
    \"events\": [
        \"transaction.created\",
        \"beneficiary.confirmation_requested\",
        \"beneficiary.confirmed\",
        \"beneficiary.declined\"
    ]
}"
Example response:
{
    "message": "Webhook registered successfully.",
    "id": "9d2e5c8a-1234-5678-9abc-def012345678",
    "url": "https://partner.com/webhooks/goescrow",
    "secret": "whsec_abc123xyz789...",
    "events": [
        "transaction.created",
        "transaction.clearance_pending"
    ]
}

Delete webhook

DELETE
https://partners.staging.goescrow.net
/api/v1/webhooks/{id}
requires authentication

Unregisters a webhook.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

webhook
string
required

The webhook ID

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Response Fields

Example request:
curl --request DELETE \
    "https://partners.staging.goescrow.net/api/v1/webhooks/1" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "message": "Webhook deleted successfully."
}
{
    "message": "Webhook not found."
}

List webhook deliveries

GET
https://partners.staging.goescrow.net
/api/v1/webhooks/{webhook_id}/deliveries
requires authentication

Returns the delivery history for a webhook (most recent first), so missed events can be inspected and replayed after an outage. Each delivery records the event, the exact payload that was (or will be) sent, the number of attempts, and the last response status.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

webhook
string
required

The webhook ID

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Response Fields

Example request:
curl --request GET \
    --get "https://partners.staging.goescrow.net/api/v1/webhooks/1/deliveries" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "data": [
        {
            "id": "9f1b2c3d-4567-89ab-cdef-0123456789ab",
            "event": "transaction.funded",
            "status": "failed",
            "attempts": 3,
            "response_status": 500,
            "last_attempted_at": "2024-01-15T10:32:00Z",
            "delivered_at": null,
            "created_at": "2024-01-15T10:30:00Z",
            "payload": {
                "transaction_id": "...",
                "status": "pending"
            }
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 50,
        "total": 1
    }
}

Redeliver a webhook event

POST
https://partners.staging.goescrow.net
/api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/redeliver
requires authentication

Queues a fresh delivery attempt for a past event, using the original payload. Use this to backfill events your endpoint missed during an outage. A new delivery record is created (with a new id) so the original attempt history is preserved.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

webhook
string
required

The webhook ID

Example:
9d2e5c8a-1234-5678-9abc-def012345678
delivery
string
required

The delivery ID to redeliver

Example:
9f1b2c3d-4567-89ab-cdef-0123456789ab

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/webhooks/1/deliveries/1/redeliver" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "message": "Webhook delivery has been queued for redelivery.",
    "id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
    "event": "transaction.funded",
    "status": "pending"
}
{
    "message": "Delivery not found."
}
{
    "message": "This delivery is still in progress; wait for it to finish before redelivering."
}

Company Bank Account Management

Manage company bank accounts using Confirmation of Payee

Update company bank account

PUT
https://partners.staging.goescrow.net
/api/v1/companies/{company_id}/bank-account
requires authentication

Updates company bank details and runs Confirmation of Payee checks against the company's active known names.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

company_id
string
required

The company UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request PUT \
    "https://partners.staging.goescrow.net/api/v1/companies/9d2e5c8a-1234-5678-9abc-def012345678/bank-account" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"bsb_number\": \"123456\",
    \"account_number\": \"12345678\",
    \"account_name\": \"Acme Corp Pty Ltd\"
}"
Example response:

Re-check company bank account

POST
https://partners.staging.goescrow.net
/api/v1/companies/{company_id}/bank-account/verify
requires authentication

Re-runs Confirmation of Payee against the company's existing bank details. This is not payout-code verification.

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

company_id
string
required

The company UUID (36-character internal identifier)

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/companies/9d2e5c8a-1234-5678-9abc-def012345678/bank-account/verify" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:

Hosted Login

Create an identity-only hosted login session, send the user to the returned GoEscrow URL, receive a one-time code at the registered redirect URL, then verify the code server-to-server. The redirect URL is configured by GoEscrow and snapshotted when the session is created.

Create a hosted login session

POST
https://partners.staging.goescrow.net
/api/v1/login-sessions
requires authentication

Creates a short-lived hosted login session. Open the returned url in the user's browser. After the user signs in and confirms, GoEscrow redirects to the partner's registered URL with session_id, code, and the optional reference query parameters.

curl -X POST 'https://partner-api.goescrow.com.au/api/v1/login-sessions' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"email":"jane@example.com","reference":"order-8812"}'

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/login-sessions" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"jane@example.com\",
    \"reference\": \"order-8812\"
}"
Example response:

Verify a hosted login code

POST
https://partners.staging.goescrow.net
/api/v1/login-sessions/{loginSession}/verify
requires authentication

Redeems the one-time code delivered to the registered redirect URL. Verification must use the same partner API key that created the session and must occur before the code expires.

curl -X POST 'https://partner-api.goescrow.com.au/api/v1/login-sessions/9d2e5c8a-1234-5678-9abc-def012345678/verify' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"code":"CODE_FROM_REDIRECT"}'

Headers

X-API-Key
Example:
{YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

loginSession
string
required

The hosted login session UUID returned during creation.

Example:
9d2e5c8a-1234-5678-9abc-def012345678

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://partners.staging.goescrow.net/api/v1/login-sessions/9d2e5c8a-1234-5678-9abc-def012345678/verify" \
    --header "X-API-Key: {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"CODE_FROM_REDIRECT\"
}"
Example response: