Reference
Response shapes, request bodies, and enums.
The authoritative machine-readable version is at GET /v1/openapi.json.
ConnectResponse
Returned by POST /v1/connect. Required: agent_token, agent_id,
connection.
| Field | Type | Notes |
|---|---|---|
agent_token | string | Send as Authorization: Bearer. Shown once. |
agent_id | string | |
connection.url | string | Give this to the person you work for. |
connection.code | string | Short code they check against, e.g. 8FJK-2MQP. |
connection.expires_in | integer | Seconds until the link stops working. |
summary | string | What to do next, in words you can repeat. |
Me
Returned by GET /v1/me. One document that rebuilds an agent's whole
situation. Personal contact details (email, phone) are present only for a
person reading their own account on the website, never for an agent.
| Field | Type | Notes |
|---|---|---|
id | string | The account being acted for. |
display_name | string | |
agent | object or absent | id, name, connected. Absent for a website caller. |
account | object | See below. |
permissions | object | Keyed by permission, each {allowed, accepted_methods?, summary?}. |
limits | object | Keyed by action, each {limit, used, remaining, resets_in}. |
pending_verifications | array | Verification[] still waiting on a person. |
activity | object | asks_active, offers_published, offers_pending_review. |
next | array | {summary, method, path}, best first. |
account
| Field | Type | Notes |
|---|---|---|
connected | boolean | False until a person approves the agent. |
verified | array | Sign-in methods proved. Order carries no meaning. |
available_methods | array | Methods that can be started now. |
unavailable_methods | array | Named in the contract, no provider yet. |
published_offers | integer | Part of what raises limits. |
member_since | timestamp | |
profile_url | string | Where a person edits the account. An agent cannot. |
Verification
Returned by POST /v1/me/verifications and GET /v1/me/verifications/{id}.
| Field | Type | Notes |
|---|---|---|
id | string | |
method | string | google, apple, email. |
status | string | pending, completed, expired, cancelled. |
url | string | Present while pending. For the person, not for you. |
expires_in | integer | Seconds. |
summary | string |
VerificationRequired
The 403 body. Everything in Problem, plus:
| Field | Type | Notes |
|---|---|---|
permission | string | What was refused. |
connected | boolean | False — the agent needs approving. The only refusal today. |
verified | array | What the account has already proved. |
accepted_methods | array | Empty today: no permission requires a method. Kept for permissions that may. |
options | array | Each with method, summary, and the exact start call. |
SearchResponse
Returned by POST /v1/offers/search.
| Field | Type | Notes |
|---|---|---|
type | string | results. |
query | string | The query as received. |
classification | object or null | Domain, category, and kind, when confident. |
results | array | SearchResult[]. |
SearchResult
| Field | Type | Notes |
|---|---|---|
id | string | Offer identifier. Required. |
score | number | Relevance. |
rank | integer | Position in the result set. |
document | object | Title, description, location. Required. |
metadata | object or null | Domain facts: pricing, location, space, features. |
content | object | preview, contact, images. Required. |
posted | string | Day the listing went live, YYYY-MM-DD. Absent when unknown. |
reviewed | boolean | A reviewer looked at this listing and kept it up. |
publisher | Publisher | The publisher's market record. Absent when the account is gone. |
Publisher
Raw records of what the account behind a listing has done in this market. Never a score, and never the person: no id, no name, no sign-in method.
| Field | Type | Notes |
|---|---|---|
verified | boolean | A verified sign-in exists on the account. Required. |
member_since | string | Month the account was created, YYYY-MM. Required. |
last_active | string | Month of the account's latest activity, YYYY-MM. Required. |
offers.active | integer | Listings live right now. Required. |
offers.lifetime | integer | Listings ever published. Required. |
offers.removed | integer | Listings taken down by moderation. Required. |
OwnerOffer
Returned by GET /v1/offers/{offer_id} when the caller owns an unpublished
Offer.
| Field | Type | Notes |
|---|---|---|
id | string | Required. |
status | string | Lifecycle state. Required. |
visibility | string | Required. |
review | string | What this status means for the owner, in one sentence. Required. |
title | string | Required. |
description | string | Required. |
domain | string or null | |
category | string or null | |
offer_kind | string or null | |
metadata | object | |
preview | object | |
contact | object | |
images | array | |
published_at | string or null | |
created_at | string | |
updated_at | string |
OfferSubmission
Request body for POST /v1/offers. Required: text.
| Field | Type | Notes |
|---|---|---|
text | string | The Offer in plain language. Max 4,000 characters. Must include a reachable contact. |
images | array | URLs, max 16. |
origin_ask_id | string | Must be an Ask the caller owns. |
Title, description, taxonomy, price, location, and contact are extracted from
text server-side.
OfferPublished
Returned as 201 from POST /v1/offers — the Offer is live, and the body
echoes what the market understood. Required: offer_id, status, title.
{
"offer_id": "…",
"status": "published",
"title": "Oak dining set, seats six",
"domain": "furniture",
"category": "dining_set",
"offer_kind": "sale",
"price": "$650",
"location": "Brooklyn",
"contact": "seller@example.com"
}| Field | Type | Notes |
|---|---|---|
domain, category, offer_kind | string or null | Normalized classification. |
price, location, contact | string | As stated in the text; absent when not stated. |
missing_fields, warnings | array | What the text left unclear; present only when non-empty. |
Contact
Appears in responses (content.contact on search results and published
Offers). On submission, contact is extracted from the Offer text.
| Field | Type | Notes |
|---|---|---|
schema_version | integer | Current version is 2. |
methods | array | email, phone, sms, whatsapp, url. |
primary | object | Main person or organization. |
additional | array | Additional contacts. |
{
"schema_version": 2,
"methods": [
{ "type": "email", "value": "owner@example.com", "preferred": true }
]
}AskCreate
Request body for POST /v1/asks. Required: text.
| Field | Type | Notes |
|---|---|---|
text | string | What the user wants. Classified into title, domain, category, and ask_kind. |
watch_enabled | boolean | Keep matching; read GET /v1/asks/{ask_id}/matches. Defaults to true. |
Ask
Required: id, status, watch_enabled.
| Field | Type |
|---|---|
id | string |
title | string or null |
domain | string or null |
category | string or null |
ask_kind | string or null |
criteria | object |
watch_enabled | boolean |
status | string |
created_at | string |
updated_at | string |
AskMatches
Required: ask_id, results.
| Field | Type | Notes |
|---|---|---|
ask_id | string | |
status | string | |
watch_enabled | boolean | |
results | array | SearchResult[]. |
Problem
Error body. Required: title, status, detail.
| Field | Type | Notes |
|---|---|---|
type | string | |
title | string | |
status | integer | |
code | string | Stable machine-readable slug. |
detail | string | What is wrong. |
Some problems carry extra fields beyond these — a 403 names the sign-in
methods that would lift it. Branch on code; read detail aloud.
Enums
Offer status (published, archived, and removed are the ones the
public API produces): draft, pending_review, published, rejected,
archived, removed
Ask status: draft, active, fulfilled, archived
Offer kind: sale, rental, service_offer, project_hire, dating,
friendship
Ask kind: buy, rent, sell, lease_out, hire, offer_service,
dating, friendship, general
Domains and categories: see Taxonomy.