Reference
projects · API
Endpoints, parameters, request bodies and response schemas for projects in Squario API v1.
projects
10 documented operations
Contract descriptions and schemas are kept in English, exactly as generated by the API.
GET/v1/projects
List projects
Operation list_projects
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
pageOptional | query | 1-based page number, for pages within the first 10,000 records (the last is floor(10000 / page_size) + 1). Deeper, walk with View JSON schema{
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
} |
cursorOptional | query | Keyset pagination: View JSON schema{
"type": "string"
} |
page_sizeOptional | query | Records per page. View JSON schema{
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
} |
sortOptional | query | A sortable field key (GET /v1/resources/{resource} lists View JSON schema{
"type": "string"
} |
orderOptional | query | Sort direction. View JSON schema{
"type": "string",
"enum": [
"asc",
"desc"
],
"default": "desc"
} |
searchOptional | query | Free-text search. View JSON schema{
"type": "string"
} |
include_archivedOptional | query | Include archived records. View JSON schema{
"type": "boolean",
"default": false
} |
filterOptional | query | A URL-encoded JSON array of filters.
|
joinOptional | query | How filters combine. View JSON schema{
"type": "string",
"enum": [
"and",
"or"
],
"default": "and"
} |
fieldsOptional | query | Comma-separated top-level properties to return ( View JSON schema{
"type": "string"
} |
Responses
200 One page of records.
application/json
{
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/projects_record"
}
},
"meta": {
"$ref": "#/components/schemas/ListMeta"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
422 The workspace refused the values (unknown field, required field, rule), or the Idempotency-Key was already used for a different request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
POST/v1/projects
Create one of projects
Operation create_projects
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
Idempotency-KeyOptional | header | Makes the write safe to retry: a repeat of the same request with the same key within 24 hours returns the first successful response (with View JSON schema{
"type": "string",
"minLength": 1,
"maxLength": 255
} |
Request body
Required
application/json · View JSON schema
{
"type": "object",
"additionalProperties": true,
"description": "Field values keyed by field key; only the fields to set. Custom fields as cf__<key> fields or as one `custom_fields` object (not both). An unknown field is refused (422). data_model_records take `model_id` here or as a query parameter. GET /v1/resources/{resource} lists the writable fields."
}Responses
201 The created record.
application/json
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"$ref": "#/components/schemas/projects_record"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.LocationThe created record's URL.Idempotent-Replayedtruewhen this is the stored response to an earlier request with the same Idempotency-Key.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
405 The method is not allowed here (e.g. a write on a read-only resource).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Allow
409 The write conflicts with an existing record, or a request with the same Idempotency-Key is still running.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
413 The body is over 1 MiB.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
422 The workspace refused the values (unknown field, required field, rule), or the Idempotency-Key was already used for a different request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
POST/v1/projects/query
List projects, parameters in the body
Operation query_projects
The list endpoint with its parameters as JSON (filters as a real array). Counts as a read.
Authentication · Workspace API key
Parameters
This operation has no parameters.
Request body
Optional
application/json · View JSON schema
{
"type": "object",
"additionalProperties": false,
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1,
"description": "1-based page number, for pages within the first 10,000 records (the last is floor(10000 / page_size) + 1). Deeper, walk with `cursor`. Not combinable with `cursor`."
},
"cursor": {
"type": "string",
"description": "Keyset pagination: `start` begins a walk, then send each response's `meta.next_cursor` verbatim until it is null. Reaches any depth; keep the same sort, order, search and filters throughout. Not combinable with `page`."
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"sort": {
"type": "string"
},
"order": {
"type": "string",
"enum": [
"asc",
"desc"
]
},
"search": {
"type": "string",
"description": "Free text; full-text-indexed resources only."
},
"include_archived": {
"type": "boolean",
"default": false
},
"filters": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Filter"
}
},
"join": {
"type": "string",
"enum": [
"and",
"or"
],
"default": "and"
},
"model_id": {
"type": "string",
"format": "uuid",
"description": "Required for data_model_records only."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"description": "Top-level properties to return (`id` is always kept); a name the record does not have is skipped."
}
}
}Responses
200 One page of records.
application/json
{
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/projects_record"
}
},
"meta": {
"$ref": "#/components/schemas/ListMeta"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
413 The body is over 1 MiB.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
422 The workspace refused the values (unknown field, required field, rule), or the Idempotency-Key was already used for a different request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
GET/v1/projects/{id}
Get one of projects
Operation get_projects
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
idRequired | path | The record's UUID. View JSON schema{
"type": "string",
"format": "uuid"
} |
fieldsOptional | query | Comma-separated top-level properties to return ( View JSON schema{
"type": "string"
} |
Responses
200 The record.
application/json
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"$ref": "#/components/schemas/projects_record"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.Idempotent-Replayedtruewhen this is the stored response to an earlier request with the same Idempotency-Key.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
PATCH/v1/projects/{id}
Update one of projects
Operation update_projects
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
idRequired | path | The record's UUID. View JSON schema{
"type": "string",
"format": "uuid"
} |
Idempotency-KeyOptional | header | Makes the write safe to retry: a repeat of the same request with the same key within 24 hours returns the first successful response (with View JSON schema{
"type": "string",
"minLength": 1,
"maxLength": 255
} |
Request body
Required
application/json · View JSON schema
{
"type": "object",
"additionalProperties": true,
"description": "Field values keyed by field key; only the fields to set. Custom fields as cf__<key> fields or as one `custom_fields` object (not both). An unknown field is refused (422). data_model_records take `model_id` here or as a query parameter. GET /v1/resources/{resource} lists the writable fields."
}Responses
200 The record.
application/json
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"$ref": "#/components/schemas/projects_record"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.Idempotent-Replayedtruewhen this is the stored response to an earlier request with the same Idempotency-Key.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
405 The method is not allowed here (e.g. a write on a read-only resource).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Allow
409 The write conflicts with an existing record, or a request with the same Idempotency-Key is still running.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
413 The body is over 1 MiB.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
422 The workspace refused the values (unknown field, required field, rule), or the Idempotency-Key was already used for a different request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
DELETE/v1/projects/{id}
Archive one of projects
Operation archive_projects
A soft delete: the record is archived and can be restored.
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
idRequired | path | The record's UUID. View JSON schema{
"type": "string",
"format": "uuid"
} |
Idempotency-KeyOptional | header | Makes the write safe to retry: a repeat of the same request with the same key within 24 hours returns the first successful response (with View JSON schema{
"type": "string",
"minLength": 1,
"maxLength": 255
} |
Request body
Optional
application/json · View JSON schema
{
"type": "object",
"additionalProperties": false,
"properties": {
"reason": {
"type": "string",
"maxLength": 1000
}
}
}Responses
200 The record.
application/json
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"$ref": "#/components/schemas/projects_record"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.Idempotent-Replayedtruewhen this is the stored response to an earlier request with the same Idempotency-Key.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
405 The method is not allowed here (e.g. a write on a read-only resource).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Allow
409 The write conflicts with an existing record, or a request with the same Idempotency-Key is still running.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
413 The body is over 1 MiB.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
422 The workspace refused the values (unknown field, required field, rule), or the Idempotency-Key was already used for a different request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
POST/v1/projects/{id}/restore
Restore an archived one of projects
Operation restore_projects
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
idRequired | path | The record's UUID. View JSON schema{
"type": "string",
"format": "uuid"
} |
Idempotency-KeyOptional | header | Makes the write safe to retry: a repeat of the same request with the same key within 24 hours returns the first successful response (with View JSON schema{
"type": "string",
"minLength": 1,
"maxLength": 255
} |
Responses
200 The record.
application/json
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"$ref": "#/components/schemas/projects_record"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.Idempotent-Replayedtruewhen this is the stored response to an earlier request with the same Idempotency-Key.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
405 The method is not allowed here (e.g. a write on a read-only resource).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Allow
409 The write conflicts with an existing record, or a request with the same Idempotency-Key is still running.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
413 The body is over 1 MiB.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
422 The workspace refused the values (unknown field, required field, rule), or the Idempotency-Key was already used for a different request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
GET/v1/projects/{id}/deals
List the deals linked to one of projects
Operation list_projects_deals
A deal attached to a delivery project. The project's primary deal (its deal_id) is always linked and cannot be unlinked (409); point the project at another deal first. A key with a resource list must cover deals as well as projects.
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
idRequired | path | The record's UUID. View JSON schema{
"type": "string",
"format": "uuid"
} |
pageOptional | query | 1-based page of links. View JSON schema{
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
} |
page_sizeOptional | query | Links per page. View JSON schema{
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 100
} |
Responses
200 One page of links, oldest first.
application/json
{
"type": "object",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project_deals_link"
}
},
"meta": {
"$ref": "#/components/schemas/LinkListMeta"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
PUT/v1/projects/{id}/deals/{target_id}
Link one of deals to one of projects, or update the link
Operation link_projects_deals
A deal attached to a delivery project. The project's primary deal (its deal_id) is always linked and cannot be unlinked (409); point the project at another deal first. Creates the link (201) or updates its fields (200); repeating it changes nothing. A key with a resource list must cover deals as well as projects.
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
idRequired | path | The record's UUID. View JSON schema{
"type": "string",
"format": "uuid"
} |
target_idRequired | path | The UUID of the record on the other side of the link. View JSON schema{
"type": "string",
"format": "uuid"
} |
Idempotency-KeyOptional | header | Makes the write safe to retry: a repeat of the same request with the same key within 24 hours returns the first successful response (with View JSON schema{
"type": "string",
"minLength": 1,
"maxLength": 255
} |
Responses
200 The link.
application/json
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"$ref": "#/components/schemas/project_deals_link"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.Idempotent-Replayedtruewhen this is the stored response to an earlier request with the same Idempotency-Key.
201 The new link.
application/json
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"$ref": "#/components/schemas/project_deals_link"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.Idempotent-Replayedtruewhen this is the stored response to an earlier request with the same Idempotency-Key.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
405 The method is not allowed here (e.g. a write on a read-only resource).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Allow
409 The write conflicts with an existing record, or a request with the same Idempotency-Key is still running.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
413 The body is over 1 MiB.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
422 The workspace refused the values (unknown field, required field, rule), or the Idempotency-Key was already used for a different request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
DELETE/v1/projects/{id}/deals/{target_id}
Unlink one of deals from one of projects
Operation unlink_projects_deals
A deal attached to a delivery project. The project's primary deal (its deal_id) is always linked and cannot be unlinked (409); point the project at another deal first. Answers the removed link; 404 when the two are not linked. A key with a resource list must cover deals as well as projects.
Authentication · Workspace API key
Parameters
| Parameter | Location | Contract |
|---|---|---|
idRequired | path | The record's UUID. View JSON schema{
"type": "string",
"format": "uuid"
} |
target_idRequired | path | The UUID of the record on the other side of the link. View JSON schema{
"type": "string",
"format": "uuid"
} |
Idempotency-KeyOptional | header | Makes the write safe to retry: a repeat of the same request with the same key within 24 hours returns the first successful response (with View JSON schema{
"type": "string",
"minLength": 1,
"maxLength": 255
} |
Responses
200 The link.
application/json
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"$ref": "#/components/schemas/project_deals_link"
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.X-RateLimit-LimitRequests allowed in the window of the tightest rate limit (absent when none applies).X-RateLimit-RemainingRequests left in that window.X-RateLimit-ResetSeconds until that window resets.X-Quota-LimitThe workspace's monthly request quota (absent when uncapped).X-Quota-RemainingRequests left this month (absent when uncapped).X-Quota-ResetWhen the monthly quota resets.Idempotent-Replayedtruewhen this is the stored response to an earlier request with the same Idempotency-Key.
400 Malformed parameters or body (invalid_request).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
401 Missing, unknown, revoked or expired API key.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.WWW-Authenticate
403 The key or its owner may not make this request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
404 No such route, resource or record.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
405 The method is not allowed here (e.g. a write on a read-only resource).
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Allow
409 The write conflicts with an existing record, or a request with the same Idempotency-Key is still running.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
413 The body is over 1 MiB.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
422 The workspace refused the values (unknown field, required field, rule), or the Idempotency-Key was already used for a different request.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
429 Rate limited, or the monthly quota is used up.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.Retry-AfterSeconds to wait before retrying.X-RateLimit-ResetSeconds until that window resets.
500 Unexpected failure.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
503 Temporarily unable to check the key or reach the data.
application/json
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}Response headers
X-Request-IdThis request's id; quote it when reporting a problem.
Schema definitions
Filter
{
"type": "object",
"additionalProperties": false,
"required": [
"field",
"op"
],
"properties": {
"field": {
"type": "string",
"description": "A field key; a custom field's `filter_key` (cfv:<id>) from GET /v1/resources/{resource}; or rel:<fk_column>.<column> for a related record's column."
},
"op": {
"type": "string",
"enum": [
"eq",
"ne",
"gt",
"gte",
"lt",
"lte",
"iLike",
"notILike",
"inArray",
"notInArray",
"isBetween",
"isEmpty",
"isNotEmpty"
]
},
"value": {
"description": "A scalar for most operators; an array for inArray/notInArray; a [low, high] pair for isBetween; omitted for isEmpty/isNotEmpty. Dates are ISO 8601."
}
}
}projects_record
{
"type": "object",
"title": "Project",
"description": "A Project record as the key's owner may read it. Built-in fields are listed; custom fields and anything else the workspace adds arrive as further properties. GET /v1/resources/projects describes this workspace's fields.",
"additionalProperties": true,
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"title": "Name",
"x-squario-kind": "text"
},
"code": {
"title": "Code",
"x-squario-kind": "text"
},
"status_id": {
"title": "Status",
"x-squario-kind": "relation"
},
"health": {
"title": "Health",
"x-squario-kind": "enum"
},
"visibility": {
"title": "Visibility",
"x-squario-kind": "enum"
},
"owner_member_id": {
"title": "Owner",
"x-squario-kind": "relation"
},
"client_company_id": {
"title": "Client company",
"x-squario-kind": "relation"
},
"client_contact_id": {
"title": "Client contact",
"x-squario-kind": "relation"
},
"start_date": {
"title": "Start date",
"x-squario-kind": "date",
"type": [
"string",
"null"
],
"format": "date"
},
"end_date": {
"title": "End date",
"x-squario-kind": "date",
"type": [
"string",
"null"
],
"format": "date"
},
"budget_amount": {
"title": "Budget",
"x-squario-kind": "number",
"type": [
"number",
"null"
]
},
"budget_currency_code": {
"title": "Budget currency",
"x-squario-kind": "relation"
},
"description": {
"title": "Description",
"x-squario-kind": "text"
},
"created_at": {
"title": "Created",
"x-squario-kind": "date",
"type": [
"string",
"null"
],
"format": "date-time"
}
}
}ListMeta
{
"type": "object",
"description": "Page mode carries `page`; cursor mode carries `next_cursor` and `cursor_supported` instead, and `has_more` is `next_cursor !== null`.",
"required": [
"page_size",
"total",
"has_more"
],
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Page mode only."
},
"next_cursor": {
"type": [
"string",
"null"
],
"description": "Cursor mode only: send it as `cursor` for the next page; null on the last one."
},
"cursor_supported": {
"type": "boolean",
"description": "Cursor mode only. False when this sort cannot be walked (search relevance): the response is then a plain first page with no `next_cursor`."
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"total": {
"type": "integer",
"minimum": 0
},
"total_is_capped": {
"type": "boolean",
"description": "Present when the count stopped at its cap: `total` is then a lower bound."
},
"has_more": {
"type": "boolean"
}
}
}Error
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"type",
"code",
"message",
"request_id"
],
"properties": {
"type": {
"type": "string",
"enum": [
"invalid_request_error",
"authentication_error",
"permission_error",
"not_found_error",
"conflict_error",
"validation_error",
"rate_limit_error",
"api_error"
]
},
"code": {
"type": "string",
"enum": [
"invalid_request",
"invalid_api_key",
"expired_api_key",
"key_assurance_stale",
"ip_not_allowed",
"permission_denied",
"plan_upgrade_required",
"insufficient_scope",
"feature_unavailable",
"forbidden",
"not_found",
"unknown_resource",
"route_not_found",
"method_not_allowed",
"conflict",
"idempotency_key_in_use",
"payload_too_large",
"validation_failed",
"idempotency_key_reused",
"rate_limited",
"quota_exceeded",
"internal_error",
"service_unavailable"
]
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": true
},
"request_id": {
"type": "string",
"format": "uuid"
}
}
}
}
}RecordWrite
{
"type": "object",
"additionalProperties": true,
"description": "Field values keyed by field key; only the fields to set. Custom fields as cf__<key> fields or as one `custom_fields` object (not both). An unknown field is refused (422). data_model_records take `model_id` here or as a query parameter. GET /v1/resources/{resource} lists the writable fields."
}QueryRequest
{
"type": "object",
"additionalProperties": false,
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1,
"description": "1-based page number, for pages within the first 10,000 records (the last is floor(10000 / page_size) + 1). Deeper, walk with `cursor`. Not combinable with `cursor`."
},
"cursor": {
"type": "string",
"description": "Keyset pagination: `start` begins a walk, then send each response's `meta.next_cursor` verbatim until it is null. Reaches any depth; keep the same sort, order, search and filters throughout. Not combinable with `page`."
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"sort": {
"type": "string"
},
"order": {
"type": "string",
"enum": [
"asc",
"desc"
]
},
"search": {
"type": "string",
"description": "Free text; full-text-indexed resources only."
},
"include_archived": {
"type": "boolean",
"default": false
},
"filters": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Filter"
}
},
"join": {
"type": "string",
"enum": [
"and",
"or"
],
"default": "and"
},
"model_id": {
"type": "string",
"format": "uuid",
"description": "Required for data_model_records only."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"description": "Top-level properties to return (`id` is always kept); a name the record does not have is skipped."
}
}
}ArchiveRequest
{
"type": "object",
"additionalProperties": false,
"properties": {
"reason": {
"type": "string",
"maxLength": 1000
}
}
}project_deals_link
{
"type": "object",
"description": "A deal attached to a delivery project. The project's primary deal (its `deal_id`) is always linked and cannot be unlinked (409); point the project at another deal first.",
"additionalProperties": false,
"required": [
"project_id",
"deal_id",
"created_at"
],
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "The projects record's id."
},
"deal_id": {
"type": "string",
"format": "uuid",
"description": "The deals record's id."
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}LinkListMeta
{
"type": "object",
"required": [
"page",
"page_size",
"has_more"
],
"properties": {
"page": {
"type": "integer",
"minimum": 1
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"has_more": {
"type": "boolean"
}
}
}