agency-time
POST /v1/agency/time/projects/from-quote
Start a project from a free-quote request.
Authentication
Send an API key as a bearer token. The key must carry the agency.time.manage permission; a key without it is refused with 403, not 404.
Where your organisation id goes
This endpoint takes org_id as a field in the JSON body.
Your organisation id is on the API keys screen in your dashboard, beside the key itself. It is the same id in every call you make.
Try it
Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.
curl -X POST https://api.zinndigital.com/v1/agency/time/projects/from-quote \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "quote_id": <string> }'Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console
Details
Zinn Digital®'s own organisation only (docs/670 §2). In one transaction: the requester becomes a client (found by e-mail, or created, carrying the request's country), a project board is opened with the brief, a time project is linked to both in the quoted currency, the quoted price becomes a fixed-price task, and the request is marked won — which is what stops the admin queue's charge conversion and the draft-from-quote invoice billing the same job again. Requires agency.time.manage in the organisation and the quotes.manage staff permission the admin queue requires. Idempotent per request: a second call returns the project the first one made, with created: false.
Request body
| Name | Type | Required | What it is |
|---|---|---|---|
quote_id | string | Yes | — |
amount_minor | integer | No | The agreed price, NET, in minor units — only for a request that has not been priced. On a priced request omit it; a different figure is refused. |
currency | string | No | — |
country | string | No | The client's ISO-2 country, used only when the request carries none (the public form does not ask). The bill on the checkout needs it; anything but two letters is refused. |
org_id | string | No | — |
Response
| Name | Type | Required | What it is |
|---|---|---|---|
project | TimeProject | Yes | — |
board_id | string | Yes | — |
client_id | string | Yes | — |
created | boolean | Yes | FALSE when a project for this request already existed and was returned. |
price_already_billed_on | string | No | The reference of a bill already drafted straight from this request, when there was one — in which case the project carries no fixed price, because that bill charges it. |
Errors this endpoint can return
401 · 403 · 422