Get the account profile picture

GET /v1/me/avatar

Returns the profile picture of the account that owns the API key, as image bytes served directly in the response body (never a redirect). The image is square, at most 256×256 pixels and at most 256 KB (256,000 bytes); Content-Type is exactly image/png, image/jpeg or image/webp. The ETag equals avatar.etag in GET /v1/me; send it in If-None-Match to receive 304 Not Modified. The response is sent with Cache-Control: private, max-age=86400. An account with no profile picture returns HTTP 404 avatar_not_found; GET /v1/me then shows avatar: null. While the picture is temporarily unavailable, the response is HTTP 503 service_unavailable with a Retry-After header; request it again after that delay. Authentication is the same as on GET /v1/me: account API keys only, and a scoped token returns HTTP 403 scoped_token_not_allowed. The request is not billed and counts against the account's per-minute rate limit.

Authentication

Bearer API key required.

Parameters

If-None-Match (header)

The ETag of a copy you already have. When it matches the current picture, the response is 304 Not Modified with no body.

string

Responses

HTTP 200

The profile picture.

image/png

string

format: "binary"

image/jpeg

string

format: "binary"

image/webp

string

format: "binary"

HTTP 304

Not Modified. The If-None-Match value matches the current picture; the body is empty.

HTTP 401

Missing, empty, or revoked API key. This response covers three distinct codes depending on the authentication path: - missing_api_key: Authorization header absent or Bearer token is empty. On GET /v1/models, GET /v1/models/{model}, GET /v1/me and GET /v1/me/avatar, which also accept the x-api-key header, the message is "Provide your API key as: Authorization: Bearer sk-devup-..., or in the x-api-key header." - invalid_api_key: Key not found, deactivated, or not valid. - token_revoked: The scoped JWT credential has been explicitly revoked.

application/json

ErrorResponse

ErrorResponse

Authorization header absent or empty Bearer token
{
  "error": {
    "message": "Provide your API key as: Authorization: Bearer sk-devup-...",
    "type": "devup_error",
    "code": "missing_api_key"
  }
}
Key not found, deactivated, or not valid
{
  "error": {
    "message": "The API key provided is invalid or has been deactivated.",
    "type": "devup_error",
    "code": "invalid_api_key"
  }
}
Scoped JWT credential has been explicitly revoked (scoped-token auth only)
{
  "error": {
    "message": "This scoped token has been revoked.",
    "type": "devup_error",
    "code": "token_revoked"
  }
}

HTTP 403

Account suspended or scoped credential does not permit the requested model. - account_suspended: The DEVUP account is suspended; all requests are blocked. - model_not_allowed: The scoped credential does not grant access to the requested model. This code is never returned for unrestricted master API keys. - scoped_token_not_allowed: On GET /v1/me and GET /v1/me/avatar, which accept account API keys (sk-devup-...) only, a scoped token was sent.

application/json

ErrorResponse

ErrorResponse

DEVUP account is suspended
{
  "error": {
    "message": "Account suspended. Contact support.",
    "type": "devup_error",
    "code": "account_suspended"
  }
}
Scoped credential does not permit the requested model (scoped-token auth only)
{
  "error": {
    "message": "This scoped token does not grant access to the requested model.",
    "type": "devup_error",
    "code": "model_not_allowed"
  }
}

HTTP 404

The account has no profile picture.

application/json

ErrorResponse

ErrorResponse

{
  "error": {
    "message": "This account has no profile picture.",
    "type": "devup_error",
    "code": "avatar_not_found"
  }
}

HTTP 429

Too many requests. error.code is rate_limit_exceeded (your account's per-minute limit), model_at_capacity (the model is momentarily at capacity; Retry-After: 5 and retry-after-ms: 5000, no X-RateLimit-* headers; the OpenAI and Anthropic SDKs retry it automatically), concurrency_limit_exceeded, tpm_limit_exceeded, or flex_capacity_unavailable. Wait the number of seconds in Retry-After before retrying.

application/json

ErrorResponse

ErrorResponse

Your account's per-minute limit is reached
{
  "error": {
    "message": "Rate limit exceeded. Please slow down your requests and try again shortly.",
    "type": "devup_error",
    "code": "rate_limit_exceeded"
  }
}
The model is momentarily at capacity
{
  "error": {
    "message": "This model is currently at capacity. Retry in a few seconds.",
    "type": "devup_error",
    "code": "model_at_capacity"
  }
}

HTTP 503

Requests are temporarily paused or the requested model is temporarily unavailable. Retry according to the delay communicated in Retry-After and/or retry-after-ms when present.

application/json

ErrorResponse

ErrorResponse

Requests are paused for a few seconds
{
  "error": {
    "message": "Requests are paused for a few seconds. Retry after the delay in the Retry-After header.",
    "type": "devup_error",
    "code": "service_unavailable"
  }
}
The requested model is temporarily unavailable
{
  "error": {
    "message": "The requested model is temporarily unavailable. Retry shortly.",
    "type": "devup_error",
    "code": "model_unavailable"
  }
}