View as Markdown

API reference / AI agents

Pre-trade hooks and holds

AI agents. Generated from the OpenAPI document the services export (/openapi.json).

Samples use the placeholders YOUR_API_KEY and YOUR_ACCOUNT_ID. Paste a sandbox key (twsk_…) to fill them in and to use Try it. It stays in this browser tab and is only sent to the sandbox, never to the live API.

Try it is off in this build: No sandbox URL is configured for this build of the docs.

GET /v1/pretrade-holds

List Holds Auth: X-API-Key

Holds, newest first (created_at, then id). Cursor-paginated: {data, has_more, next_cursor}; the cursor is bound to status and account_id.

Parameters of GET /v1/pretrade-holds
ParameterInTypeDescription
statusquerystring | null
account_idquerystring | null
limitqueryintegerPage size, 1..500 (default 100).
cursorquerystring | nullThe next_cursor of the previous page, unchanged.

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X GET 'https://api.tickwire.io/v1/pretrade-holds' \
  -H 'X-API-Key: YOUR_API_KEY'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "GET",
        "/v1/pretrade-holds",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("GET", "/v1/pretrade-holds");
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

GET /v1/pretrade-holds/{hold_id}

Get Hold Auth: X-API-Key

One hold.

Parameters of GET /v1/pretrade-holds/{hold_id}
ParameterInTypeDescription
hold_id requiredpathstring

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X GET 'https://api.tickwire.io/v1/pretrade-holds/HOLD_ID' \
  -H 'X-API-Key: YOUR_API_KEY'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "GET",
        "/v1/pretrade-holds/HOLD_ID",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("GET", "/v1/pretrade-holds/HOLD_ID");
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

POST /v1/pretrade-holds/{hold_id}/cancel

Cancel Hold Auth: X-API-Key

Owner override: reject a pending hold. Nothing is sent.

Parameters of POST /v1/pretrade-holds/{hold_id}/cancel
ParameterInTypeDescription
hold_id requiredpathstring

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X POST 'https://api.tickwire.io/v1/pretrade-holds/HOLD_ID/cancel' \
  -H 'X-API-Key: YOUR_API_KEY'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "POST",
        "/v1/pretrade-holds/HOLD_ID/cancel",
        idempotency_key="my-request-1",
        reason="why you are doing this",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("POST", "/v1/pretrade-holds/HOLD_ID/cancel", {
  idempotencyKey: "my-request-1",
  reason: "why you are doing this",
});
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

POST /v1/pretrade-holds/{hold_id}/release

Release Hold Auth: X-API-Key

Approve or reject a hold; signed with the holding hook's secret.

Parameters of POST /v1/pretrade-holds/{hold_id}/release
ParameterInTypeDescription
hold_id requiredpathstring

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X POST 'https://api.tickwire.io/v1/pretrade-holds/HOLD_ID/release' \
  -H 'X-API-Key: YOUR_API_KEY'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "POST",
        "/v1/pretrade-holds/HOLD_ID/release",
        idempotency_key="my-request-1",
        reason="why you are doing this",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("POST", "/v1/pretrade-holds/HOLD_ID/release", {
  idempotencyKey: "my-request-1",
  reason: "why you are doing this",
});
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

GET /v1/pretrade-hooks

List Hooks Auth: X-API-Key

This tenant's hooks (never the secrets), oldest first. Cursor-paginated: {data, has_more, next_cursor}.

Parameters of GET /v1/pretrade-hooks
ParameterInTypeDescription
limitqueryintegerPage size, 1..500 (default 100).
cursorquerystring | nullThe next_cursor of the previous page, unchanged.

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X GET 'https://api.tickwire.io/v1/pretrade-hooks' \
  -H 'X-API-Key: YOUR_API_KEY'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "GET",
        "/v1/pretrade-hooks",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("GET", "/v1/pretrade-hooks");
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

POST /v1/pretrade-hooks

Create Hook Idempotency-Key Auth: X-API-Key

Register a pre-trade decision hook. The secret is shown once. Idempotency-Key is honoured: a replay returns the same hook without registering another, with secret: null and a secret_notice.

Parameters of POST /v1/pretrade-hooks
ParameterInTypeDescription
Idempotency-Keyheaderstring | null
X-Actorheaderstring | null
X-Reasonheaderstring | null

Request body object required

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X POST 'https://api.tickwire.io/v1/pretrade-hooks' \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Idempotency-Key: my-request-1' \
  -H 'X-Reason: why you are doing this' \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://example.com/pretrade","account_id":"YOUR_ACCOUNT_ID"}'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "POST",
        "/v1/pretrade-hooks",
        json={
            "url": "https://example.com/pretrade",
            "account_id": "YOUR_ACCOUNT_ID",
        },
        idempotency_key="my-request-1",
        reason="why you are doing this",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("POST", "/v1/pretrade-hooks", {
  body: {"url":"https://example.com/pretrade","account_id":"YOUR_ACCOUNT_ID"},
  idempotencyKey: "my-request-1",
  reason: "why you are doing this",
});
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

GET /v1/pretrade-hooks/{hook_id}

Get Hook Auth: X-API-Key

One hook.

Parameters of GET /v1/pretrade-hooks/{hook_id}
ParameterInTypeDescription
hook_id requiredpathstring

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X GET 'https://api.tickwire.io/v1/pretrade-hooks/HOOK_ID' \
  -H 'X-API-Key: YOUR_API_KEY'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "GET",
        "/v1/pretrade-hooks/HOOK_ID",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("GET", "/v1/pretrade-hooks/HOOK_ID");
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

PATCH /v1/pretrade-hooks/{hook_id}

Patch Hook Auth: X-API-Key

Change url, applies_to, fail_mode, timeout, hold TTL or enabled.

Parameters of PATCH /v1/pretrade-hooks/{hook_id}
ParameterInTypeDescription
hook_id requiredpathstring
X-Actorheaderstring | null
X-Reasonheaderstring | null

Request body object required

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X PATCH 'https://api.tickwire.io/v1/pretrade-hooks/HOOK_ID' \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'X-Reason: why you are doing this' \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://example.com/pretrade"}'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "PATCH",
        "/v1/pretrade-hooks/HOOK_ID",
        json={"url": "https://example.com/pretrade"},
        idempotency_key="my-request-1",
        reason="why you are doing this",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("PATCH", "/v1/pretrade-hooks/HOOK_ID", {
  body: {"url":"https://example.com/pretrade"},
  idempotencyKey: "my-request-1",
  reason: "why you are doing this",
});
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

DELETE /v1/pretrade-hooks/{hook_id}

Delete Hook Auth: X-API-Key

Remove a hook. Its pending holds stay pending until they expire.

Parameters of DELETE /v1/pretrade-hooks/{hook_id}
ParameterInTypeDescription
hook_id requiredpathstring
X-Actorheaderstring | null
X-Reasonheaderstring | null

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X DELETE 'https://api.tickwire.io/v1/pretrade-hooks/HOOK_ID' \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'X-Reason: why you are doing this'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "DELETE",
        "/v1/pretrade-hooks/HOOK_ID",
        idempotency_key="my-request-1",
        reason="why you are doing this",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("DELETE", "/v1/pretrade-hooks/HOOK_ID", {
  idempotencyKey: "my-request-1",
  reason: "why you are doing this",
});
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.

POST /v1/pretrade-hooks/{hook_id}/rotate-secret

Rotate Hook Secret Idempotency-Key Auth: X-API-Key

Issue a new signing secret (shown once); the old one stops working. With Idempotency-Key a replay rotates nothing and answers secret: null with a secret_notice.

Parameters of POST /v1/pretrade-hooks/{hook_id}/rotate-secret
ParameterInTypeDescription
hook_id requiredpathstring
Idempotency-Keyheaderstring | null
X-Actorheaderstring | null
X-Reasonheaderstring | null

Responses

Errors (common for this kind of call; every error uses one envelope)

curl

curl -sS -X POST 'https://api.tickwire.io/v1/pretrade-hooks/HOOK_ID/rotate-secret' \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Idempotency-Key: my-request-1' \
  -H 'X-Reason: why you are doing this'

Python

from tickwire import Tickwire

with Tickwire("https://api.tickwire.io", "YOUR_API_KEY") as tw:
    result = tw.request(
        "POST",
        "/v1/pretrade-hooks/HOOK_ID/rotate-secret",
        idempotency_key="my-request-1",
        reason="why you are doing this",
    )
    print(result)

TypeScript

import { TickwireClient } from "@tickwire/sdk";

const tw = new TickwireClient({ baseUrl: "https://api.tickwire.io", token: "YOUR_API_KEY" });
const result = await tw.request("POST", "/v1/pretrade-hooks/HOOK_ID/rotate-secret", {
  idempotencyKey: "my-request-1",
  reason: "why you are doing this",
});
console.log(result);
tw.close();
Try it in the sandbox

Try it is off in this build of the docs: no sandbox URL is configured. The samples above work against the sandbox with your sandbox key.