인증
Bearer 토큰으로 API 키를 전송하세요. 키는 반드시 billing.payment.manage 권한을 가지고 있어야 하며, 권한이 없는 키는 404가 아닌 403으로 거부됩니다.
이 엔드포인트는 조직 ID를 받지 않습니다. 사용자의 키가 이미 속한 조직을 식별하며, 응답은 해당 조직으로 한정됩니다.
무료 체험하기
대괄호 안에 있는 모든 내용을 사용자 지정 값으로 바꾸고, 키 플레이스홀더는 대시보드의 키로 바꾸세요.
curl -X POST https://api.zinndigital.com/v1/certificates/orders \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-d '{ "product_code": <string>, "common_name": <string>, "currency": <string> }'로그인하셨나요? 대시보드의 API 콘솔이 실제 조직 ID와 본인의 키를 자동으로 채우고 라이브 API를 대상으로 요청을 실행하므로 실제 응답을 확인할 수 있습니다. API 콘솔에서 이 엔드포인트를 여세요
상세 정보
⭐ **This does NOT buy anything** — `submit` does. The split exists so the refusals a customer can act on arrive while they are still on the screen rather than as a failed background job, and so a half-filled form can never place an order. ⛔ Answers `422` when the product does not cover what was asked for: a wildcard name on a non-wildcard certificate, more domains than the **price** includes, a term the authority does not sell, or an account not in good standing. Each of those is an order the authority would happily charge for and never issue. Requires `billing.payment.manage`.
요청 본문
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
product_code | string | 예 | — |
common_name | string | 예 | The primary domain. A leading `*.` is a wildcard and is refused on a product that does not cover one — the authority would accept it at order time and refuse it at issuance, aft… |
currency | string | 예 | — |
period_years | integer | 아니요 | — |
domains | string[] | 아니요 | Additional names. ⛔ Capped by the product's `included_domains` — what the **price** covers — not by what the authority would technically allow, because it bills names beyond the… |
응답
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
id | Uuid | 예 | UUIDv7 identifier — sortable by creation time (docs/02 §8). |
product_code | string | 예 | The stable machine key (`positive_ssl`). ⛔ Match on this, never on `product_name` — the name is the certificate authority's marketing string and can be corrected without the pro… |
product_name | string | 예 | What the customer reads — the authority's own product name (`PositiveSSL`, `S/MIME Personal`, `Unified Communications Certificate (UCC)`). ⛔ Never a translation key: these are t… |
state | string<pending, awaiting_validation, issued, cancelled, failed, expired> | 예 | ⛔⛔ **`awaiting_validation` means PAID AND NOT ISSUED.** The authority charges at order time and then waits for the customer to prove they control the domain. It is deliberately… |
common_name | string | 예 | The primary domain on the certificate. |
domains | string[] | 예 | Additional names (SANs). Empty for a single-domain product. |
period_years | integer | 예 | — |
price_minor | integer | 예 | What the customer is charged, frozen at order. A copy rather than a join, so an operator repricing the catalogue cannot move an existing bill. |
currency | string | 예 | — |
validation_instructions | string | 예 | What the customer must still do, in the authority's own words. ⭐ Carried as text rather than parsed: every authority words it differently, and a half-parsed instruction is worse… |
certificate_pem | string | 예 | The issued certificate. ⭐ Public by nature — it is served to every visitor of the site — which is why it is returned here while its **private key never is**: a customer-generate… |
chain_pem | string | 예 | — |
message | string | 예 | Why it failed or was cancelled, in a sentence the customer reads. |
ordered_at | string | 예 | — |
issued_at | string | 예 | — |
expires_at | string | 예 | — |
days_until_expiry | integer | 예 | Whole days until `expires_at`, negative once it has lapsed. ⛔ `null` and `0` are DIFFERENT answers and a client must not collapse them: `null` means we could not read an expiry… |
renewable | boolean | 예 | Whether to offer a re-order now — issued, inside the 30-day window, and with no renewal already in flight. ⛔ Computed here rather than left to a client to derive from `expires_a… |
free_alternative_exists | boolean | 예 | Whether Let's Encrypt issues this kind of certificate for nothing. Carried onto the renewal prompt for the same reason it is on the buy screen: say so **before** asking somebody… |
renewal_of | Uuid | 예 | The order this one renews, so a client can show the chain. |
last_reminded_at | string | 예 | When the renewal sweep last REACHED this order — which is not the same as when it last emailed about it. ⛔ The sweep stamps this for every row it reaches **including the ones it… |
이 엔드포인트가 반환할 수 있는 오류
401 · 403 · 422 · 429