Native model inference
POST /v1/inference/{model_path}
Sends a JSON payload in the model's own request format to the specified model. The model path uses an organization/model-name format (e.g., deepseek-ai/DeepSeek-V4-Pro). The request body schema is model-dependent — consult the model's documentation for supported parameters.
Authentication
Bearer API key required.
Parameters
model_path (path) — Required
The model identifier in org/model-name format. Model identifiers may contain slash-separated segments. Generated SDKs may percent-encode / as %2F. DEVUP accepts both literal slash-separated paths and percent-encoded slash values (e.g., deepseek-ai/DeepSeek-V4-Pro or deepseek-ai%2FDeepSeek-V4-Pro).
Request body — Required
application/json
objectFree-form JSON payload forwarded to the model. The exact schema depends on the target model.
| Field | Type and description |
|---|---|
webhook | string Optional callback URL for asynchronous delivery of inference results. This field is honoured on this native inference endpoint only; it has no effect on the OpenAI-compatible endpoints.
|
{
"input": "Hello from Algeria!",
"max_new_tokens": 256
}Responses
HTTP 200
Inference completed successfully. Response schema is model-dependent.
application/json
object| Field | Type and description | ||||||||
|---|---|---|---|---|---|---|---|---|---|
_devup | schemaoneOfobject Billing reservation metadata when webhook callback is requested.
|
Synchronous response (no webhook)
{
"output": "Example model output",
"_devup": {
"request_id": "req_9fd8ddec5b2149539860a86dccba58cf"
}
}Asynchronous response (webhook specified)
{
"id": "inf-9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"model": "deepseek-ai/DeepSeek-V4-Pro",
"inference_status": {
"status": "queued"
},
"_devup": {
"request_id": "req_9fd8ddec5b2149539860a86dccba58cf"
}
}HTTP 400
Invalid request body or parameters.
application/json
ErrorResponse{
"error": {
"message": "The \"model\" field is required.",
"type": "devup_error",
"code": "missing_model"
}
}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
ErrorResponseAuthorization 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 402
DZD balance depleted or scoped credential budget exhausted.
- insufficient_balance: The DEVUP account has insufficient available balance.
Also returned on POST /v1/chat/completions and POST /v1/responses for a request
with a non-empty tools array that the balance does not cover in full.
- budget_exhausted: The scoped credential has reached its configured budget.
This code is never returned for unrestricted master API keys.
application/json
ErrorResponseDEVUP account has insufficient available balance
{
"error": {
"message": "Your balance is depleted. Top up at https://devupai.com/dashboard/billing.",
"type": "devup_error",
"code": "insufficient_balance"
}
}Scoped credential budget exhausted (scoped-token auth only)
{
"error": {
"message": "Scoped token budget has been exhausted.",
"type": "devup_error",
"code": "budget_exhausted"
}
}HTTP 404
The requested model identifier was not found in the catalog. It is not retryable unless the model identifier is changed.
application/json
ErrorResponseModel not found in catalog
{
"error": {
"message": "The requested model was not found.",
"type": "devup_error",
"code": "model_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
ErrorResponseYour 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 502
The model could not complete the request this time. Retry the request.
A request that the model rejects is never returned as 502: it returns 400 with a
specific code, such as tools_not_supported, conversation_must_end_with_user,
empty_message_content, feature_not_supported, response_format_not_supported or invalid_request_error.
- DEVUP_COMPUTE_ERROR: The model returned an empty or unreadable response, or could not complete the request this time.
- response_truncated: The response stream was cut off before completing.
application/json
ErrorResponseThe model could not complete the request
{
"error": {
"message": "The model could not complete this request. Retry it; retrying usually succeeds.",
"type": "devup_error",
"code": "DEVUP_COMPUTE_ERROR"
}
}Response was cut off before completing
{
"error": {
"message": "The response was cut off before completing. Retrying will produce a complete response.",
"type": "devup_error",
"code": "DEVUP_COMPUTE_ERROR"
}
}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
ErrorResponseRequests 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"
}
}