API Reference
cards
7 endpoints across 2 paths
- /api/v1/cards
- /api/v1/organizations
/api/v1/cards
/api/v1/cardsList Cards
List the cards the caller holds.
Query parameters
| identifier | string | null | Return only the card with exactly this identifier. How a caller turns a scanned card into the uuid the rest of this resource is addressed by. |
| default_backend | string | default: "primary" |
| page | integer | default: 1 · ≥ 1 |
| page_size | integer | default: 20 · ≥ 1 · ≤ 100 |
| sort_by | string | null | |
| sort_order | string | default: "asc" |
Responses
| Field | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| total_items* | integer | Total number of items available | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| total_pages* | integer | Total number of pages available | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| current_page* | integer | Current page number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| items* | CardResponse[] | List of items on the current page | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
array items · CardResponse
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
Example request
curl -X GET "https://api.davi.social/api/v1/cards" \
-H "Authorization: Bearer <token>"/api/v1/cards/{card_uuid}Get Card
Read one of the caller's cards.
A card the caller does not hold answers 404, the same as one that does
not exist.
Path parameters
| card_uuid* | string |
Responses
| Field | Type | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| uuid* | string | |||||||||||||||||||||||||||||||
| identifier* | string | |||||||||||||||||||||||||||||||
| name | string | null | |||||||||||||||||||||||||||||||
| card_type* | CardType | |||||||||||||||||||||||||||||||
| is_primary | boolean | default: false | ||||||||||||||||||||||||||||||
| is_frozen* | boolean | |||||||||||||||||||||||||||||||
| organization_uuid | string | null | |||||||||||||||||||||||||||||||
| front_image_url | string | null | Resolved front image: custom override > card model > None | ||||||||||||||||||||||||||||||
| back_image_url | string | null | Back image from card model design | ||||||||||||||||||||||||||||||
| custom_front_image_url | string | null | User's custom front image override (if set) | ||||||||||||||||||||||||||||||
| profile_page_uuid | string | null | |||||||||||||||||||||||||||||||
| card_model_uuid | string | null | |||||||||||||||||||||||||||||||
| membership_tier_uuid | string | null | |||||||||||||||||||||||||||||||
| card_model | CardModelSummaryResponse | null | |||||||||||||||||||||||||||||||
object · CardModelSummaryResponse
| ||||||||||||||||||||||||||||||||
| membership_tier | MembershipTierSummaryResponse | null | |||||||||||||||||||||||||||||||
object · MembershipTierSummaryResponse
| ||||||||||||||||||||||||||||||||
| created_at* | string (date-time) | |||||||||||||||||||||||||||||||
| updated_at | string (date-time) | null | |||||||||||||||||||||||||||||||
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
Example request
curl -X GET "https://api.davi.social/api/v1/cards/{card_uuid}" \
-H "Authorization: Bearer <token>"/api/v1/organizations
/api/v1/organizations/{organization_slug}/cardsList Organization Cards
List the cards in the organization's inventory.
Path parameters
| organization_slug* | string |
Query parameters
| page | integer | default: 1 · ≥ 1 |
| page_size | integer | default: 20 · ≥ 1 · ≤ 100 |
| sort_by | string | null | |
| sort_order | string | default: "desc" |
| identifier | string | null | Return only the card with exactly this identifier. How a caller turns a scanned card into the uuid the rest of this resource is addressed by. |
| search | string | null | Return cards whose identifier contains this text. A search, not a lookup — use `identifier` for an exact match. |
| default_backend | string | default: "primary" |
Responses
| Field | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| total_items* | integer | Total number of items available | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| total_pages* | integer | Total number of pages available | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| current_page* | integer | Current page number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| items* | CardResponse[] | List of items on the current page | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
array items · CardResponse
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
Example request
curl -X GET "https://api.davi.social/api/v1/organizations/{organization_slug}/cards" \
-H "Authorization: Bearer <token>"/api/v1/organizations/{organization_slug}/cardsAssign Organization Cards
Take manufactured cards into the organization's inventory.
Each identifier must already exist — cards are minted once by fulfillment, and an organization takes one rather than creating it. An identifier the platform never made is refused, which is what stops one tenant from claiming another's batch or blocking a range it does not own.
Partial success by design: one bad identifier in a batch does not reject the rest, and each failure comes back with its reason. Assigning a card the organization already holds is a no-op, so a retried batch is safe.
Charged to the expensive rate-limit bucket per card, not per call,
because taking a card into inventory is the operation worth bounding —
identifiers are readable off the object, so a large batch is a large number
of attempts. A batch is capped at 20 for the same reason: the cap is the
bucket, and a longer one could never be accepted. Taking a box of cards in
is therefore paced rather than instant.
Path parameters
| organization_slug* | string |
Query parameters
| default_backend | string | default: "primary" |
Request body*application/json
| Field | Type | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| cards* | AssignOrgCardRequest[] | Cards to take into inventory. Each card in the batch is charged against the rate limit separately | |||||||||
array items · AssignOrgCardRequest
| |||||||||||
| membership_tier_uuid | string | string (uuid) | null | Default membership tier for all cards (can be overridden per card) | |||||||||
Responses
| Field | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| assigned | CardResponse[] | Cards now in the organization's inventory | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
array items · CardResponse
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| failed | object[] | Cards that could not be assigned, each with the reason | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
Example request
curl -X POST "https://api.davi.social/api/v1/organizations/{organization_slug}/cards" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ /* request body */ }'/api/v1/organizations/{organization_slug}/cards/{card_uuid}Get Organization Card
Read one card from the organization's inventory.
Path parameters
| card_uuid* | string | |
| organization_slug* | string |
Query parameters
| default_backend | string | default: "primary" |
Responses
| Field | Type | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| uuid* | string | |||||||||||||||||||||||||||||||
| identifier* | string | |||||||||||||||||||||||||||||||
| name | string | null | |||||||||||||||||||||||||||||||
| card_type* | CardType | |||||||||||||||||||||||||||||||
| is_primary | boolean | default: false | ||||||||||||||||||||||||||||||
| is_frozen* | boolean | |||||||||||||||||||||||||||||||
| organization_uuid | string | null | |||||||||||||||||||||||||||||||
| front_image_url | string | null | Resolved front image: custom override > card model > None | ||||||||||||||||||||||||||||||
| back_image_url | string | null | Back image from card model design | ||||||||||||||||||||||||||||||
| custom_front_image_url | string | null | User's custom front image override (if set) | ||||||||||||||||||||||||||||||
| profile_page_uuid | string | null | |||||||||||||||||||||||||||||||
| card_model_uuid | string | null | |||||||||||||||||||||||||||||||
| membership_tier_uuid | string | null | |||||||||||||||||||||||||||||||
| card_model | CardModelSummaryResponse | null | |||||||||||||||||||||||||||||||
object · CardModelSummaryResponse
| ||||||||||||||||||||||||||||||||
| membership_tier | MembershipTierSummaryResponse | null | |||||||||||||||||||||||||||||||
object · MembershipTierSummaryResponse
| ||||||||||||||||||||||||||||||||
| created_at* | string (date-time) | |||||||||||||||||||||||||||||||
| updated_at | string (date-time) | null | |||||||||||||||||||||||||||||||
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
Example request
curl -X GET "https://api.davi.social/api/v1/organizations/{organization_slug}/cards/{card_uuid}" \
-H "Authorization: Bearer <token>"/api/v1/organizations/{organization_slug}/cards/{card_uuid}Update Organization Card
Update a card in the organization's inventory.
Covers the card model, the membership tier assignment and the registry freeze. To remove a value, pass an empty string for that field.
The frozen flag here is the registry freeze and is dominant: a card
frozen by its issuer stays frozen however its holder sets their own flag on
PATCH /cards/{card_uuid}.
Takes both card:org:manage and card:org:freeze because freezing folded
into this endpoint: the permission is checked per endpoint rather than per
field, and no role separates the two scopes anyway.
Path parameters
| card_uuid* | string | |
| organization_slug* | string |
Query parameters
| default_backend | string | default: "primary" |
Request body*application/json
| Field | Type | Description |
|---|---|---|
| name | string | string | null | Friendly name for the card. Set to empty string to remove. max length 255 |
| card_model_uuid | string | string | string (uuid) | null | UUID of the card model (design template) to assign. Set to empty string to remove. |
| membership_tier_uuid | string | string | string (uuid) | null | UUID of the membership tier to auto-assign when claimed. Set to empty string to remove. |
| frozen | boolean | null | Whether the card is frozen. Freezing is a state the card is in, not an event: set it true or false and omit to leave it alone. |
Responses
| Field | Type | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| uuid* | string | |||||||||||||||||||||||||||||||
| identifier* | string | |||||||||||||||||||||||||||||||
| name | string | null | |||||||||||||||||||||||||||||||
| card_type* | CardType | |||||||||||||||||||||||||||||||
| is_primary | boolean | default: false | ||||||||||||||||||||||||||||||
| is_frozen* | boolean | |||||||||||||||||||||||||||||||
| organization_uuid | string | null | |||||||||||||||||||||||||||||||
| front_image_url | string | null | Resolved front image: custom override > card model > None | ||||||||||||||||||||||||||||||
| back_image_url | string | null | Back image from card model design | ||||||||||||||||||||||||||||||
| custom_front_image_url | string | null | User's custom front image override (if set) | ||||||||||||||||||||||||||||||
| profile_page_uuid | string | null | |||||||||||||||||||||||||||||||
| card_model_uuid | string | null | |||||||||||||||||||||||||||||||
| membership_tier_uuid | string | null | |||||||||||||||||||||||||||||||
| card_model | CardModelSummaryResponse | null | |||||||||||||||||||||||||||||||
object · CardModelSummaryResponse
| ||||||||||||||||||||||||||||||||
| membership_tier | MembershipTierSummaryResponse | null | |||||||||||||||||||||||||||||||
object · MembershipTierSummaryResponse
| ||||||||||||||||||||||||||||||||
| created_at* | string (date-time) | |||||||||||||||||||||||||||||||
| updated_at | string (date-time) | null | |||||||||||||||||||||||||||||||
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
Example request
curl -X PATCH "https://api.davi.social/api/v1/organizations/{organization_slug}/cards/{card_uuid}" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ /* request body */ }'/api/v1/organizations/{organization_slug}/cards/{card_uuid}Release Organization Card
Give up a card, returning it to platform inventory.
The registry row survives: the identifier belongs to the physical object and outlives any organization holding it. What the organization gives up is the card's issuer and the tier it carried.
A card someone holds may be released, and the membership it was the basis for ends with it. The holder keeps the card — releasing it is not taking it back, and an organization has no reach into someone's wallet — but the tier it granted is no longer the organization's to grant, and a membership resting on a card the organization has given up is an entitlement outliving what justified it. A membership the holder has on any other basis — added by the organization, joined by themselves — is untouched either way.
keep_membership leaves it standing, for a release that is not a
departure: retiring a run of cards, moving inventory back to the platform,
honouring a term someone already paid for. It is the organization's call to
make because the organization is the other party to that term — nobody else
can say whether giving up the card was meant to end it. Ending is the
default, since a membership nobody decided to keep should not outlast its
basis by inaction.
A kept membership still records the released card as what authorized it. That is history rather than a live link: the basis says what enrolled someone, and the card is no longer the organization's to revoke through.
Ending one is notice, not an ending. The membership stays live and keeps
granting for a week, and is retired when that runs out. Releasing the wrong
card is a thing that happens in a console, and for those seven days it costs
nothing: DELETE /organizations/{organization_slug}/memberships/{user_uuid}/ revocation calls it off, the member is never told, and nothing has to be
put back because nothing was taken. After it, the membership is outside the
roster and only .../memberships/{user_uuid}/restore reaches it.
revoke_immediately skips the week for a release that is not a mistake
anyone will want back — a card reported stolen, an account being closed out.
It is ignored when keep_membership is set, there being nothing to revoke.
Path parameters
| card_uuid* | string | |
| organization_slug* | string |
Query parameters
| keep_membership | boolean | Leave standing the membership this card was the basis for, instead of ending it with the release. default: false |
| revoke_immediately | boolean | End the membership at once instead of giving a week's notice in which the revocation can be called off. Ignored when `keep_membership` is set. default: false |
| default_backend | string | default: "primary" |
Responses
| Field | Type | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| uuid* | string | |||||||||||||||||||||||||||||||
| identifier* | string | |||||||||||||||||||||||||||||||
| name | string | null | |||||||||||||||||||||||||||||||
| card_type* | CardType | |||||||||||||||||||||||||||||||
| is_primary | boolean | default: false | ||||||||||||||||||||||||||||||
| is_frozen* | boolean | |||||||||||||||||||||||||||||||
| organization_uuid | string | null | |||||||||||||||||||||||||||||||
| front_image_url | string | null | Resolved front image: custom override > card model > None | ||||||||||||||||||||||||||||||
| back_image_url | string | null | Back image from card model design | ||||||||||||||||||||||||||||||
| custom_front_image_url | string | null | User's custom front image override (if set) | ||||||||||||||||||||||||||||||
| profile_page_uuid | string | null | |||||||||||||||||||||||||||||||
| card_model_uuid | string | null | |||||||||||||||||||||||||||||||
| membership_tier_uuid | string | null | |||||||||||||||||||||||||||||||
| card_model | CardModelSummaryResponse | null | |||||||||||||||||||||||||||||||
object · CardModelSummaryResponse
| ||||||||||||||||||||||||||||||||
| membership_tier | MembershipTierSummaryResponse | null | |||||||||||||||||||||||||||||||
object · MembershipTierSummaryResponse
| ||||||||||||||||||||||||||||||||
| created_at* | string (date-time) | |||||||||||||||||||||||||||||||
| updated_at | string (date-time) | null | |||||||||||||||||||||||||||||||
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
| Field | Type | Description |
|---|---|---|
| errors* | object | Map of field names to error messages. Use '_root' for form-level errors. |
| message* | string | Human-readable error summary |
| code | string | null | Machine-readable error code |
| details | object | null | What the refusal is about, where it is something you can act on — the amount and currency owed on a `402`, the entitlement a tier did not grant on a `403`. Values are typed as the error carries them, so read a figure from here rather than from `errors`, whose values are always the copy a form shows against a field. |
Example request
curl -X DELETE "https://api.davi.social/api/v1/organizations/{organization_slug}/cards/{card_uuid}" \
-H "Authorization: Bearer <token>"