Read a published logo or photo
Read the image currently published on a person’s or organisation’s card.
/{kind}/{n}/logo.{format}- Access
- Public; API key optional
- Client
- Browser fetch supported
Parameters#
| Name | Location | Meaning |
|---|---|---|
kindRequired | Path | u or o. |
nRequired | Path | Permanent positive card number. |
formatRequired | Path | svg, png or gif. Use the card’s logo.url. |
v | Query | Current image hash from logo.url. A matching value allows one day of public caching. |
size | Query | PNG only, 64 or 128. Request a proportional display thumbnail when it saves bytes. Small PNGs and animated APNGs keep their original bytes. Omit for the exact published image. |
Request examples#
curl -fsS 'https://veil.rip/o/2/logo.svg'Response#
The exact published SVG, PNG or GIF when size is omitted. With size=64 or size=128 on a PNG, a smaller display derivative may be returned. Missing or hidden images return 404.
Response headers#
| Header | Value | Meaning |
|---|---|---|
Content-Type | image/svg+xml | image/png | image/gif | Use the declared media type before choosing a parser. |
Date | HTTP date | Server time. Compare it with your clock when signing requests. |
Cache-Control | no-cache or public, max-age=86400 | A v query matching the current hash prefix permits one day of caching. |
Retry-After | integer seconds, on rate_limited or busy | Wait at least this long before retrying. Other 429/503 codes do not necessarily include it. |
Usage notes#
- These image routes use the permanent number. Unpublished preview images have different access requirements.
- The response is an image, not JSON. Use it in an img element or read the bytes with response.blob().
- Thumbnails are for display. Verify the original image bytes in the signed record. SVG, GIF and APNG animation remain available unchanged; size on SVG/GIF or any value other than 64/128 returns 400 invalid_parameter. Current visibility and the v hash are checked before serving a derivative.
Errors#
API errors return an error object. Use error.code for program logic; error.message is English text for people and can change. Response and error guide
| HTTP | Code | Meaning and next step |
|---|---|---|
| 400 | invalid_parameter | A path, query or body field is missing, malformed or outside its accepted range. Correct the field named in |
| 404 | not_found | The requested card, key, alias, code or resource was not found. Check the identifier. Temporary codes and previews may already have expired or been used. |
| 410 | erased | The card existed and was erased or removed. The response also carries its public erasure receipt. Stop using this card as current authority. Retain only the public receipt if needed. |
| 422 | not_a_person | The card is an organisation where a person is required. Use the organisation endpoint or an eligible person’s card. |
| 422 | not_an_organization | The card is a person where an organisation is required. Use the person endpoint or an organisation card. |
When using an optional API key
| HTTP | Code | Meaning and next step |
|---|---|---|
| 401 | invalid_api_key | The bearer credential is malformed, unknown, expired or revoked. Use an active key. To use anonymous public access, remove |
| 403 | api_key_scope | The API key lacks read or verify scope, or the endpoint does not accept bearer keys. Use the correct scope. Identity writes and key management still require a device signature. |
| 403 | api_key_suspended | This API key is suspended. Ask staff to restore it; another key cannot lift an account suspension. |
| 403 | developer_suspended | The owner’s API account is suspended or the owner card is unavailable. Check the owner account and any staff restriction. Creating another key does not bypass suspension. |
Shared request errors
| HTTP | Code | Meaning and next step |
|---|---|---|
| 429 | rate_limited | An anonymous, signed-request or API-key allowance was exceeded. Wait at least |
| 500 | internal_error | An unexpected server error occurred. Internal details are not returned. Retry reads with bounded backoff. Check write results before sending a new signed operation. |
| 503 | busy | The application has reached a temporary concurrency or database limit. Wait |