Okidooki Night
Venues (table reservations, free entry at partner venues) and events (tickets) across cities. Settlement in the Okidooki app.
Routes on this network (33): /card · discover · quote · order · orders · status · cancel · link/status · connect/start · connect/status · venues/menu · venues/live · drinks/cheapest · offerings · menu/quote · guestlist/join · guestlist/leave · promotions · promotions/claim · checkin · djs · djs/book · djs/bookings · djs/cancel · tickets · reservations · reservations/cancel · reviews · friends/nearby · profile · gifts/send · link/confirm · link/revoke
GET /card
Agent card (Okidooki, MakeItFun). NowTrust serves it at /a2a/v0/card and a Google A2A card at /.well-known/agent.json.
No body.
Response 200
Card → Card
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/discover
What the network sells (sellers), or one seller in depth (sellerId). MakeItFun also lists occasion templates (occasions:true).
Request body
| field | type | description |
|---|
sellerId | string | |
productType | string | MakeItFun: tshirt, hoodie, cap, mug, poster, bag, phone_case, sticker, bottle, blanket, patch, tank, polo, tote, pillow, mousepad |
styles | boolean | MakeItFun: all curated looks (Design Curator) with cached preview pictures |
suggest | object | MakeItFun: top looks for a product type / occasion / vibe / city / event| field | type | description |
|---|
productType | string | | occasion | string | | vibe | string | | city | string | | event | object | | count | integer | |
|
query | string | |
categoryId | integer | |
country | string | (default CH) |
occasions | boolean | |
slots | object | |
cityName | string | Okidooki: city (or near / cityId) |
near | object | | field | type | description |
|---|
lat | number | | lng | number | |
|
kind | string | NowTrust: guard |
partySize | integer | NowTrust: guests to protect (1-5000); sizes the team |
intent | string | NowTrust: birthday | party | corporate | event | wedding | club | vip | escort | home | shop (maps to a security type) |
securityType | string: event_security | bodyguard | nightclub_security | private_property | escort_security | NowTrust: explicit type (wins over intent) |
now | boolean | NowTrust: available right now |
limit | integer | |
Response 200
Sellers
| field | type | description |
|---|
sellers | Seller[] | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/quote
Firm price (30 minutes) for a seller/variant/design and the linked user's situation (address, mandate).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
sellerId | string | NowTrust: guard:<id> or company:<id> from discover; MakeItFun: product:<id>; Okidooki: venue:<id> / event:<id> |
designId | string | MakeItFun: from preview |
variantId | integer | |
quantity | integer | |
team | object[] | MakeItFun: one unit per member with name/number printed; size = that member's own size (same colour), priced per size |
teamPlacement | string | |
shippingMethod | string | |
durationHours | number | NowTrust: booking length |
when | string | NowTrust: start (ISO 8601, not in the past, within the booking horizon) |
location | object | NowTrust: where the guard is needed| field | type | description |
|---|
lat | number | | lng | number | | address | string | |
|
intent | string | NowTrust: see discover |
securityType | string: event_security | bodyguard | nightclub_security | private_property | escort_security | |
Response 200
Quote → Quote
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/order
Place the order for a quote. The user confirms/pays in the seller's app (confirmUrl); poll status.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
quoteId required | string | |
note | string | |
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/orders
Latest orders of the user placed with this key.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
limit | integer | |
Response 200
Orders
| field | type | description |
|---|
orders | Order[] | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/status
Order status (payment, production, tracking).
Request body
| field | type | description |
|---|
orderId required | string | |
userRef | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/cancel
Cancel (free before payment / production; refund rules per network).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
orderId required | string | |
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/link/status
Is the user linked, what the account can do (address, card, ID), and the mandate the user set for this agent (`mandate`; NowTrust also `partnerMandate`). order / sos outside the mandate fail with 403 mandate_scope.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
Status
| field | type | description |
|---|
linked | boolean | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/connect/start
Okidooki gateway. Universal "Connect with Okidooki" for your user on several networks at once (one page, one mandate).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
networks | string: okidooki | nowtrust | makeitfun[] | |
displayName | string | |
mandate | Mandate | Limits the user set for THIS agent (okidooki.app/webapp/connect). Amounts in centimes; null = no limit.| field | type | description |
|---|
perOrderMax | integer | null | | monthlyMax | integer | null | | capabilities | array | null | null = everything the network offers | validUntil | string | null | | autoApprove | boolean | NowTrust: bookings within the limits settle without a tap | spentThisMonth | integer | | remainingThisMonth | integer | null | | expired | boolean | |
|
Response 200
Connect (status pending; url for the user) → Connect
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/connect/status
Okidooki gateway. Outcome of a connect (poll every 10 s); after approved use link/status on each network.
Request body
| field | type | description |
|---|
connectId | string | |
userRef | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
Connect → Connect
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/venues/live
Live city pulse: venues ranked by people checked in now, tonight's events, live promotions, friends out
Request body
Response 200
{ venues: [{ id, name, checkedInNow, trend, ... }], events, promotions, friendsOut }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/drinks/cheapest
Cheapest drinks across the city's venues
Request body
Response 200
{ count, drinks: [{ venueId, venue, name, price, currency }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/offerings
What can be bought at a venue (menu items) or an event (ticket tiers)
Request body
Response 200
{ items: [{ id, name, price, currency }] } or { tiers: [{ ticketTypeId, name, price, available }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/guestlist/join
Put the linked user on an event's guest list (mandate capability guestlist)
Request body
Response 200
{ ok, status, entryId?, waitlisted? } or userLinks when the event needs in-app action
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/guestlist/leave
Remove the linked user from an event's guest list
Request body
Response 200
{ ok }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/promotions
Live and upcoming free-of-charge offers (FOC) in the city
Request body
Response 200
{ count, promotions: [{ id, title, venue, reward, startsAt, endsAt, remaining }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/promotions/claim
Claim a promotion for the linked user; the venue approves, the QR shows in the app (capability promotions)
Request body
Response 200
{ ok, claimId, message }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/checkin
Check the linked user in at a venue (capability checkin)
Request body
Response 200
{ ok, venue }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/djs
Bookable DJs and artists with ids
Request body
Response 200
{ count, djs: [{ id, stageName, genres, city, rate }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/djs/book
DJ booking request for the linked user; the DJ answers with a price in the app (capability book_dj)
Request body
Response 200
{ bookingId, status: requested, dj, date, time, userLinks }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/djs/bookings
The linked user's DJ booking requests
Request body
Response 200
{ count, bookings: [{ bookingId, djId, djStageName, date, time, status, price? }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/djs/cancel
Cancel a DJ booking request
Request body
Response 200
{ bookingId, status: cancelled }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/tickets
The linked user's purchased tickets
Request body
Response 200
{ count, tickets: [{ id, eventId, eventName, tier, status, qr? }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/reservations
The linked user's upcoming table reservations
Request body
Response 200
{ count, reservations: [{ id, venueId, venue, date, time, partySize, status }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/reservations/cancel
Cancel one of the linked user's table reservations
Request body
Response 200
{ ok }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/reviews
Reviews and average rating of a venue (Okidooki: venueId) or a guard / company (NowTrust: sellerId)
Request body
Response 200
{ venueId, count, averageRating, reviews: [{ rating, text, author, createdAt }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/friends/nearby
Which of the linked user's friends are out right now and how far (capability social)
Request body
Response 200
{ count, outNow, friends: [{ uid, displayName, distanceKm?, venue? }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/profile
The linked user's profile with their consent (capability profile)
Request body
Response 200
{ uid, displayName, username, cityId, cityName, avatarUrl, partyStatus, partyMode, roles, friendsCount }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/gifts/send
Start a gift to another Okidooki user; chosen and paid in the app (capability social)
Request body
Response 200
{ needs_user_confirmation: true, userLinks: [{ kind: gift, url, webUrl }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/link/confirm
Okidooki only. Confirm the pair from the buyer side.
Request body
| field | type | description |
|---|
okidookiUid required | string | |
externalUid required | string | |
Response 200
Linked
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/link/revoke
End the link for a user.
Request body
| field | type | description |
|---|
userRef | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
externalUid | string | |
Response 200
Unlinked
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
NowTrust
Licensed private security in Switzerland: guard and company bookings, SOS dispatch, spending mandates. Settlement: card on file / mandate (Stripe).
Routes on this network (23): discover · quote · order · orders · status · cancel · link/start · link/status · reviews · receipt · sos · sos/status · sos/cancel · sellers · availability · reviews/create · bookings · bookings/status · messages · messages/send · incidents · series/quote · series/order
POST /a2a/v0/discover
What the network sells (sellers), or one seller in depth (sellerId). MakeItFun also lists occasion templates (occasions:true).
Request body
| field | type | description |
|---|
sellerId | string | |
productType | string | MakeItFun: tshirt, hoodie, cap, mug, poster, bag, phone_case, sticker, bottle, blanket, patch, tank, polo, tote, pillow, mousepad |
styles | boolean | MakeItFun: all curated looks (Design Curator) with cached preview pictures |
suggest | object | MakeItFun: top looks for a product type / occasion / vibe / city / event| field | type | description |
|---|
productType | string | | occasion | string | | vibe | string | | city | string | | event | object | | count | integer | |
|
query | string | |
categoryId | integer | |
country | string | (default CH) |
occasions | boolean | |
slots | object | |
cityName | string | Okidooki: city (or near / cityId) |
near | object | | field | type | description |
|---|
lat | number | | lng | number | |
|
kind | string | NowTrust: guard |
partySize | integer | NowTrust: guests to protect (1-5000); sizes the team |
intent | string | NowTrust: birthday | party | corporate | event | wedding | club | vip | escort | home | shop (maps to a security type) |
securityType | string: event_security | bodyguard | nightclub_security | private_property | escort_security | NowTrust: explicit type (wins over intent) |
now | boolean | NowTrust: available right now |
limit | integer | |
Response 200
Sellers
| field | type | description |
|---|
sellers | Seller[] | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/quote
Firm price (30 minutes) for a seller/variant/design and the linked user's situation (address, mandate).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
sellerId | string | NowTrust: guard:<id> or company:<id> from discover; MakeItFun: product:<id>; Okidooki: venue:<id> / event:<id> |
designId | string | MakeItFun: from preview |
variantId | integer | |
quantity | integer | |
team | object[] | MakeItFun: one unit per member with name/number printed; size = that member's own size (same colour), priced per size |
teamPlacement | string | |
shippingMethod | string | |
durationHours | number | NowTrust: booking length |
when | string | NowTrust: start (ISO 8601, not in the past, within the booking horizon) |
location | object | NowTrust: where the guard is needed| field | type | description |
|---|
lat | number | | lng | number | | address | string | |
|
intent | string | NowTrust: see discover |
securityType | string: event_security | bodyguard | nightclub_security | private_property | escort_security | |
Response 200
Quote → Quote
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/order
Place the order for a quote. The user confirms/pays in the seller's app (confirmUrl); poll status.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
quoteId required | string | |
note | string | |
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/orders
Latest orders of the user placed with this key.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
limit | integer | |
Response 200
Orders
| field | type | description |
|---|
orders | Order[] | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/status
Order status (payment, production, tracking).
Request body
| field | type | description |
|---|
orderId required | string | |
userRef | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/cancel
Cancel (free before payment / production; refund rules per network).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
orderId required | string | |
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/link/start
Start linking (MakeItFun, NowTrust): code + deep link the user enters in the seller app.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
displayName | string | |
Response 200
Pending or linked
| field | type | description |
|---|
status | string: pending | linked | |
code | string | null | |
deepLink | string | null | |
webLink | string | |
expiresInSeconds | integer | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/link/status
Is the user linked, what the account can do (address, card, ID), and the mandate the user set for this agent (`mandate`; NowTrust also `partnerMandate`). order / sos outside the mandate fail with 403 mandate_scope.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
Status
| field | type | description |
|---|
linked | boolean | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/reviews
Reviews and average rating of a venue (Okidooki: venueId) or a guard / company (NowTrust: sellerId)
Request body
Response 200
{ venueId, count, averageRating, reviews: [{ rating, text, author, createdAt }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/receipt
Stripe receipt of a paid order (NowTrust: orderId or bookingId; MakeItFun: orderId, sandbox orders say sandbox: true)
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
orderId | string | |
Response 200
{ orderId, status, paymentStatus, amount, currency, receiptUrl, paidAt, refunded, amountRefunded, invoiceUrl }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/sos
NowTrust. Raise an SOS for the linked user (dispatch of licensed guards); mandate and card rules apply.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
location | object | | field | type | description |
|---|
lat | number | | lng | number | |
|
address | string | |
emergencyType | string | |
description | string | |
Response 200
Emergency
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/sos/status
NowTrust. Status of an SOS.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
emergencyId required | string | |
Response 200
Emergency
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/sos/cancel
NowTrust. Cancel an SOS (fee rules apply once a guard is en route).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
emergencyId required | string | |
Response 200
Emergency
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/sellers
Profile of a guard (guard:<id>) or company (company:<id>)
Request body
| field | type | description |
|---|
sellerId required | string | |
Response 200
{ sellerId, kind, name, rating, reviewCount, totalJobs, hourlyRate, currency, specializations, languages, bio, city, serviceRadiusKm, availableNow, licensed, company } or { kind: company, guards, rating, hourlyRateFrom, specializations }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/availability
Day-by-day availability of a guard (busy slots from confirmed jobs), up to 30 days
Request body
| field | type | description |
|---|
sellerId required | string | guard:<id> |
from | string | YYYY-MM-DD (default today) |
days | integer | (default 7) |
Response 200
{ sellerId, from, to, timezone, days: [{ date, busy: [{ startTime, endTime }], free }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/reviews/create
Review a completed booking of the linked user (one review per booking; mandate capability review)
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
bookingId required | string | |
rating required | integer | |
comment | string | |
Response 200
{ reviewId, bookingId, rating, status: published }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/bookings
All bookings of the linked user (in-app and by any agent) plus agent orders awaiting approval
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
limit | integer | (default 20) |
Response 200
{ count, bookings: [{ bookingId, status, paymentStatus, securityType, date, startTime, endTime, durationHours, address, totalCHF, guard, guardArrivedAt, completedAt, incidentReport }], ordersAwaitingApproval: [{ orderId, when, totalCHF, from }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/bookings/status
One booking in detail (guard, arrival, completion, incident report, review state, guard phone while active)
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
bookingId required | string | |
Response 200
Booking view + { reviewed, guardPhone }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/messages
Chat history between the linked user and the guard of a booking
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
bookingId required | string | |
limit | integer | (default 50) |
Response 200
{ bookingId, guard, count, messages: [{ messageId, from: user|guard, text, read, at }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/messages/send
Send a chat message to the guard of an active booking (capability message)
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
bookingId required | string | |
message required | string | |
Response 200
{ messageId, bookingId, status: sent }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/incidents
Incident reports written by guards on the linked user's bookings and SOS calls
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
days | integer | (default 90) |
Response 200
{ days, count, reports: [{ kind: booking|sos, id, date, at, report, guardId }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/series/quote
Quote a multi-day or recurring series for one seller: up to 12 firm quotes (occurrences, or when + durationHours + repeat)
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
sellerId required | string | |
when | string | ISO 8601 start of the first occurrence |
durationHours | integer | |
repeat | object | | field | type | description |
|---|
every | string: day | week | | count | integer | |
|
occurrences | object[] | |
location | object | | field | type | description |
|---|
lat | number | | lng | number | | address | string | |
|
Response 200
{ sellerId, occurrences, quoted, unavailable: [{ when, reason }], quotes: [{ quoteId, when, durationHours, total, expiresAt }], total, currency, mandate, cardOnFile }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/series/order
Book every quote of a series (Idempotency-Key recommended); each booking settles within the mandate or waits for approval in NowTrust
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
quoteIds required | string[] | |
Response 200
{ seriesId, orders: [Order], failed: [{ quoteId, code, reason }], booked, awaitingApproval, confirmUrl }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
MakeItFun
Print-on-demand merch (Printful): AI / text / image designs, Design Curator looks, previews, firm quotes with shipping, orders paid by the user in the app, crew orders with per-person sizes.
Routes on this network (23): /card · discover · quote · order · orders · status · cancel · link/start · link/status · link/revoke · preview · preview/status · designs · styles/feedback · sandbox/pay · categories · products · sizes · shipping · upload · mockups · mockups/status · receipt
GET /card
Agent card (Okidooki, MakeItFun). NowTrust serves it at /a2a/v0/card and a Google A2A card at /.well-known/agent.json.
No body.
Response 200
Card → Card
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/discover
What the network sells (sellers), or one seller in depth (sellerId). MakeItFun also lists occasion templates (occasions:true).
Request body
| field | type | description |
|---|
sellerId | string | |
productType | string | MakeItFun: tshirt, hoodie, cap, mug, poster, bag, phone_case, sticker, bottle, blanket, patch, tank, polo, tote, pillow, mousepad |
styles | boolean | MakeItFun: all curated looks (Design Curator) with cached preview pictures |
suggest | object | MakeItFun: top looks for a product type / occasion / vibe / city / event| field | type | description |
|---|
productType | string | | occasion | string | | vibe | string | | city | string | | event | object | | count | integer | |
|
query | string | |
categoryId | integer | |
country | string | (default CH) |
occasions | boolean | |
slots | object | |
cityName | string | Okidooki: city (or near / cityId) |
near | object | | field | type | description |
|---|
lat | number | | lng | number | |
|
kind | string | NowTrust: guard |
partySize | integer | NowTrust: guests to protect (1-5000); sizes the team |
intent | string | NowTrust: birthday | party | corporate | event | wedding | club | vip | escort | home | shop (maps to a security type) |
securityType | string: event_security | bodyguard | nightclub_security | private_property | escort_security | NowTrust: explicit type (wins over intent) |
now | boolean | NowTrust: available right now |
limit | integer | |
Response 200
Sellers
| field | type | description |
|---|
sellers | Seller[] | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/quote
Firm price (30 minutes) for a seller/variant/design and the linked user's situation (address, mandate).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
sellerId | string | NowTrust: guard:<id> or company:<id> from discover; MakeItFun: product:<id>; Okidooki: venue:<id> / event:<id> |
designId | string | MakeItFun: from preview |
variantId | integer | |
quantity | integer | |
team | object[] | MakeItFun: one unit per member with name/number printed; size = that member's own size (same colour), priced per size |
teamPlacement | string | |
shippingMethod | string | |
durationHours | number | NowTrust: booking length |
when | string | NowTrust: start (ISO 8601, not in the past, within the booking horizon) |
location | object | NowTrust: where the guard is needed| field | type | description |
|---|
lat | number | | lng | number | | address | string | |
|
intent | string | NowTrust: see discover |
securityType | string: event_security | bodyguard | nightclub_security | private_property | escort_security | |
Response 200
Quote → Quote
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/order
Place the order for a quote. The user confirms/pays in the seller's app (confirmUrl); poll status.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
quoteId required | string | |
note | string | |
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/orders
Latest orders of the user placed with this key.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
limit | integer | |
Response 200
Orders
| field | type | description |
|---|
orders | Order[] | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/status
Order status (payment, production, tracking).
Request body
| field | type | description |
|---|
orderId required | string | |
userRef | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/cancel
Cancel (free before payment / production; refund rules per network).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
orderId required | string | |
Response 200
Order → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/link/start
Start linking (MakeItFun, NowTrust): code + deep link the user enters in the seller app.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
displayName | string | |
Response 200
Pending or linked
| field | type | description |
|---|
status | string: pending | linked | |
code | string | null | |
deepLink | string | null | |
webLink | string | |
expiresInSeconds | integer | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/link/status
Is the user linked, what the account can do (address, card, ID), and the mandate the user set for this agent (`mandate`; NowTrust also `partnerMandate`). order / sos outside the mandate fail with 403 mandate_scope.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
Status
| field | type | description |
|---|
linked | boolean | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/link/revoke
End the link for a user.
Request body
| field | type | description |
|---|
userRef | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
externalUid | string | |
Response 200
Unlinked
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/preview
MakeItFun. Render a design on a product (AI prompt, image URL, exact text or a saved design); returns a job to poll. One running preview per user.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
sellerId required | string | |
variantId required | integer | |
placement | string | One of the placements discover(sellerId) lists; omit for the product default. |
positionMode | string: centered | stretched | logo_top_left | logo_top_right | logo_bottom_left | logo_bottom_right | |
baseDesignId | string | Add this placement to an earlier design of the same variant. |
design required | object | | field | type | description |
|---|
kind | string: prompt | imageUrl | text | savedDesignId | style | | styleId | string | kind style: from discover { suggest } / { styles: true } | slots | object | kind style: values for the look's slots (name, place, year, team...) | prompt | string | | imageUrl | string | | editPrompt | string | | text | string | | font | string: bebas | anton | archivo | bangers | luckiest | righteous | pacifico | lobster | marker | poppins | | color | string | | outlineColor | string | | arc | number | | designId | string | |
|
Response 200
Job or result → PreviewResult
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/preview/status
MakeItFun. Result of a preview job (jobId optional: latest job of the user).
Request body
| field | type | description |
|---|
jobId | string | |
userRef | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
Result → PreviewResult
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/designs
MakeItFun. The linked user's saved designs (My Designs), newest first, with the designIds quote/order accept. Reusing a saved design costs nothing.
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
limit | integer | (default 20) |
Response 200
Designs
| field | type | description |
|---|
designs | PreviewResult[] | |
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/styles/feedback
MakeItFun. Thumbs up / down on a curated look (Design Curator ranking signal).
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
styleId required | string | |
vote | string: up | down | |
Response 200
Recorded
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/sandbox/pay
MakeItFun, TEST keys only. Settle a sandbox order as if the user paid.
Request body
| field | type | description |
|---|
orderId required | string | |
Response 200
Order paid → Order
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/categories
Printful catalog categories shippable to a country, with product counts
Request body
| field | type | description |
|---|
country | string | (default CH) |
Response 200
{ country, categories: [{ categoryId, title, imageUrl, parentId, productCount }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/products
Products of a category (sellerId product:<id> for discover)
Request body
| field | type | description |
|---|
categoryId required | integer | |
country | string | (default CH) |
limit | integer | (default 60) |
Response 200
{ country, categoryId, total, products: [{ sellerId, productId, title, imageUrl, brand, techniques, placements, priceFromCHF, allOverPrint }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/sizes
Size chart of a product (available sizes and measurement tables), cached 7 days
Request body
| field | type | description |
|---|
sellerId | string | product:<id> |
productId | integer | |
unit | string: cm | inches | (default cm) |
Response 200
{ productId, unit, available: [string], sizeTables: [{ type, unit, description, imageUrl, measurements: [{ name, values: [{ size, value, min, max }] }] }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/shipping
Shipping options and prices (CHF) for variants to a country/zip, or to the linked user's saved address, without a quote
Request body
| field | type | description |
|---|
items required | object[] | |
recipient | object | | field | type | description |
|---|
country_code | string | | zip | string | | city | string | | state_code | string | |
|
userRef | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
Response 200
{ shipTo, currency, rates: [{ id, name, rateCHF, minDeliveryDays, maxDeliveryDays }] }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/upload
Upload an image for the linked user's designs (base64 PNG/JPEG/WebP up to 15 MB, or a URL fetched server-side)
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
imageBase64 | string | raw base64 or data URL |
imageUrl | string | |
Response 200
{ imageUrl } to use as preview design { kind: imageUrl, imageUrl }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/mockups
Extra mockup views (lifestyle, flat, folded, hanger...) of a saved design; done within ~45 s or returns a taskKey to poll
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
designId required | string | |
optionGroups | string[] | subset of the product's option groups (default: up to 4 lifestyle/flat views) |
Response 200
{ designId, status: done|pending, taskKey, optionGroups, available, views: [{ title, url, placement }], pollAfterSeconds? }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/mockups/status
Result of a pending mockups task
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
taskKey required | string | |
Response 200
{ designId, status, taskKey, views }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.
POST /a2a/v0/receipt
Stripe receipt of a paid order (NowTrust: orderId or bookingId; MakeItFun: orderId, sandbox orders say sandbox: true)
Request body
| field | type | description |
|---|
userRef required | UserRef | | field | type | description |
|---|
network required | string | Your integration slug (the key's network). | uid required | string | Your user id. |
|
orderId | string | |
Response 200
{ orderId, status, paymentStatus, amount, currency, receiptUrl, paidAt, refunded, amountRefunded, invoiceUrl }
Errors: { error: { code, message, retryable, requestId } } with 400 / 401 / 403 / 404 / 409 / 429 / 5xx.