CartoDB-SQL-API/docs/reference/swagger.yaml

701 lines
22 KiB
YAML
Raw Normal View History

openapi: 3.0.0
info:
title: SQL API
description: >
# Introduction
CARTOs SQL API allows you to interact with your tables and data inside
CARTO, as if you were running SQL statements against a normal database.
You can execute single SQL statements or even a batch of long-running ones.
Refer to the SQL API guide to learn more.
# Authorization
In order to access SQL API you must provide an API key. The CARTO
Authorization guide explains how these keys are sent (TLDR: _HTTP basic
auth_ or _query string param_ with the API key token). Depending on the
permissions granted to the provided API key, the request will be authorized
or not.
version: 0.0.1
contact:
name: Have you found an error? Github issues
url: 'https://github.com/CartoDB/CartoDB-SQL-API/issues'
servers:
- url: 'https://{user}.{domain}/api/v2/'
description: Production server (uses live data)
variables:
domain:
default: carto.com
description: 'If on premise, change it to your domain'
user:
default: username
description: Your username
tags:
- name: Single SQL Statement
description: Run a single SQL statement
externalDocs:
url: 'http://doc.carto.com/pet-operations.htm'
- name: Batch Queries
description: >-
A Batch Queries Job enables you to request statements with long-running
CPU processing times
externalDocs:
url: 'http://doc.carto.com/pet-operations.htm'
paths:
/sql:
get:
2019-01-11 20:05:32 +08:00
summary: Using GET
description: |
2019-01-11 20:05:32 +08:00
Runs a single SQL statement using the GET endpoint:
- SELECT, INSERT, UPDATE, DELETE,
- CREATE TABLE, ALTER TABLE, DROP TABLE
- CREATE INDEX
2019-01-11 20:05:32 +08:00
**NOTICE:** If the database detects an error when it's already streaming data the status code will be 200. Make sure to check if the **optional** *error* property is set in the response.
tags:
- Single SQL Statement
operationId: getSQLStatement
parameters:
- in: query
name: q
description: SQL statement
schema:
$ref: '#/components/schemas/SQLStatementString'
required: true
- in: query
name: filename
description: Output filename
schema:
type: string
required: false
- in: query
name: format
schema:
$ref: '#/components/schemas/OutputFormat'
required: false
responses:
'200':
2019-01-11 20:05:32 +08:00
description: Ok (Check if `error` property is present)
content:
application/json:
schema:
$ref: '#/components/schemas/StatementResult'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/StatementErrorResult'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/PlatformLimits'
security:
- ApiKeyHTTPBasicAuth: []
- ApiKeyQueryParam: []
x-code-samples:
- lang: Curl
source: |
curl -X GET \
https://username.carto.com/api/v2/sql?q=SELECT count(*) FROM cities
post:
2019-01-11 20:05:32 +08:00
summary: Using POST
description: >
2019-01-11 20:05:32 +08:00
Runs a single SQL statement using the POST endpoint:
- SELECT, INSERT, UPDATE, DELETE,
- CREATE TABLE, ALTER TABLE, DROP TABLE
- CREATE INDEX
Offers the same functionality as the GET endpoint. This version may come
handy when dealing with complex/long statments.
2019-01-11 20:05:32 +08:00
**NOTICE:** If the database detects an error when it's already streaming data the status code will be 200. Make sure to check if the **optional** *error* property is set in the response.
tags:
- Single SQL Statement
operationId: postSQLStatement
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
q:
$ref: '#/components/schemas/SQLStatementString'
filename:
type: string
description: Output filename
format:
$ref: '#/components/schemas/OutputFormat'
required:
- q
example:
q: SELECT count(*) FROM cities
filename: number_of_cities.json
responses:
'200':
2019-01-11 20:05:32 +08:00
description: Ok (Check if `error` property is present)
content:
application/json:
schema:
$ref: '#/components/schemas/StatementResult'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/StatementErrorResult'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/PlatformLimits'
security:
- ApiKeyHTTPBasicAuth: []
- ApiKeyQueryParam: []
x-code-samples:
- lang: Curl
source: |
# body.json
{
"q": "SELECT count(*) FROM cities",
"filename": "number_of_cities.json"
}
curl -X POST -H "Content-Type: application/json" -d @body.json "https://username.carto.com/api/v2/sql"
/sql/copyfrom:
post:
summary: Runs a copy command to ingest data
description: |
Runs a single COPY command:
- COPY mytable (col1, col2) FROM stdin WITH (FORMAT CSV)
tags:
- Single COPY command
operationId: postCopyFromStatement
parameters:
- in: query
name: q
description: COPY statement
schema:
$ref: '#/components/schemas/SQLStatementString'
required: true
example: COPY upload_example (the_geom,name,age) FROM stdin WITH (FORMAT csv,HEADER true)
- in: header
name: Transfer-Encoding
schema:
type: string
enum:
- chunked
required: true
- in: header
name: Content-Encoding
schema:
type: string
enum:
- gzip
required: false
requestBody:
required: true
content:
application/octet-stream:
schema:
type: string
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/CopyFromStatement'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/PlatformLimits'
security:
- ApiKeyHTTPBasicAuth: []
- ApiKeyQueryParam: []
x-code-samples:
- lang: Curl
source: |
2019-02-01 18:17:00 +08:00
curl -X POST -H 'Content-Encoding: gzip' -H 'Transfer-Encoding: chunked' -H 'Content-Type: application/octet-stream' --data-binary @upload_example.csv.gz 'https://{username}.carto.com/api/v2/sql/copyfrom?q=COPY upload_example (the_geom,name,age) FROM stdin WITH (FORMAT csv,HEADER true)&api_key={api_key}'
/sql/copyto:
get:
summary: Runs a copy command to extract data
description: |
Runs a single COPY command:
- COPY mytable TO stdout WITH (FORMAT CSV)
tags:
- Single COPY command
operationId: getCopyToStatement
parameters:
- in: query
name: q
description: COPY statement
schema:
$ref: '#/components/schemas/SQLStatementString'
required: true
- in: query
name: filename
description: Sets the content-disposition file name header
schema:
type: string
required: false
responses:
'200':
description: Ok.
content:
application/octet-stream:
schema:
type: string
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/PlatformLimits'
security:
- ApiKeyHTTPBasicAuth: []
- ApiKeyQueryParam: []
x-code-samples:
- lang: Curl
source: |
2019-02-01 18:17:00 +08:00
curl --output upload_example_dl.csv --compressed "https://{username}.carto.com/api/v2/sql/copyto?q=COPY upload_example (the_geom,name,age) TO stdout WITH(FORMAT csv,HEADER true)&api_key={api_key}"
/sql/job:
post:
summary: Create a Job
description: Creates a Batch Queries Job
tags:
- Batch Queries
operationId: createJob
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateJobQueryField'
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
example:
job_id: de305d54-75b4-431b-adb2-eb6b9e546014
user: username
status: pending
query: UPDATE nasdaq SET price = '$101.00' WHERE company = 'CARTO'
created_at: '2017-12-15T07:36:25Z'
updated_at: '2017-12-15T07:36:25Z'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/PlatformLimits'
security:
- ApiKeyHTTPBasicAuth: []
- ApiKeyQueryParam: []
x-code-samples:
- lang: Curl
source: |
# body.json
{
"query": "UPDATE nasdaq SET price = '$101.00' WHERE company = 'CARTO'",
}
curl -X POST -H "Content-Type: application/json" -d @body.json "https://username.carto.com/api/v2/sql/job"
'/sql/job/{job_id}':
parameters:
- $ref: '#/components/parameters/jobId'
get:
summary: Get a Job
description: Returns a Batch Queries Job based on it's ID.
tags:
- Batch Queries
operationId: getJob
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
example:
job_id: de305d54-75b4-431b-adb2-eb6b9e546014
user: username
status: pending
query: UPDATE nasdaq SET price = '$101.00' WHERE company = 'CARTO'
created_at: '2017-12-15T07:36:25Z'
updated_at: '2017-12-15T07:36:25Z'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/PlatformLimits'
security:
- ApiKeyHTTPBasicAuth: []
- ApiKeyQueryParam: []
x-code-samples:
- lang: Curl
source: >
curl -X GET \
https://username.carto.com/api/v2/sql/job/de305d54-75b4-431b-adb2-eb6b9e546014
put:
summary: Update a Job
description: |
Updates the query of a Batch Queries Job.
**Notice:** Only the _query_ property can be updated
tags:
- Batch Queries
operationId: updateJob
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateJobQueryField'
example:
q: UPDATE nasdaq SET price = '$999.00' WHERE company = 'CARTO'
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
example:
job_id: de305d54-75b4-431b-adb2-eb6b9e546014
user: username
status: pending
query: UPDATE nasdaq SET price = '999.00' WHERE company = 'CARTO'
created_at: '2017-12-15T07:36:25Z'
updated_at: '2017-12-16T12:52:13Z'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/PlatformLimits'
security:
- ApiKeyHTTPBasicAuth: []
- ApiKeyQueryParam: []
x-code-samples:
- lang: Curl
source: |
# body.json
{
"query": "UPDATE nasdaq SET price = '$999.00' WHERE company = 'CARTO'",
}
curl -X PUT -H "Content-Type: application/json" -d @body.json
"https://username.carto.com/api/v2/sql/job/de305d54-75b4-431b-adb2-eb6b9e546014"
delete:
summary: Cancel a Job
description: >
Canceles a Batch Queries Job based on it's ID. The Job doesn't get
deleted, just it's status is set as _canceled_.
Only jobs whose status are _pending_ or _running_ can be canceled.
* **pending**: the job will never be executed
* **running**: the job will be terminated immediately
tags:
- Batch Queries
operationId: cancelJob
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
example:
job_id: de305d54-75b4-431b-adb2-eb6b9e546014
user: username
status: canceled
query: UPDATE nasdaq SET price = '999.00' WHERE company = 'CARTO'
created_at: '2017-12-15T07:36:25Z'
updated_at: '2017-12-16T12:52:13Z'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/PlatformLimits'
security:
- ApiKeyHTTPBasicAuth: []
- ApiKeyQueryParam: []
x-code-samples:
- lang: Curl
source: >
curl -X DELETE \
https://username.carto.com/api/v2/sql/job/de305d54-75b4-431b-adb2-eb6b9e546014
components:
schemas:
CopyFromStatement:
type: object
properties:
time:
type: number
format: float
description: time in seconds it has taken to run the statement
total_rows:
type: number
format: integer
description: number of rows copied into the database
example:
time: 2.3
total_rows: 142012
StatementResult:
type: object
properties:
error:
type: array
items:
type: string
2019-01-11 19:47:56 +08:00
description: (Optional) List of errors produced by the query. If this property is present, the query has failed.
time:
type: number
format: float
description: time in seconds it has taken to run the statement
total_rows:
type: number
format: integer
description: number of rows returned
rows:
type: array
items:
type: object
description: the structure/data depends on the statement
example:
time: 0.007
total_rows: 1
rows:
- count: 4994
StatementErrorResult:
type: object
properties:
error:
type: array
items:
type: string
description: List of errors produced by the query.
hint:
type: string
2019-01-11 19:47:56 +08:00
description: (Optional) Hint about the errors
example:
error: ["function st_buffer(geometry) does not exist"]
hint: No function matches the given name and argument types. You might need to add explicit type casts
Job:
allOf:
- $ref: '#/components/schemas/SQLGeneralStatment'
- type: object
properties:
job_id:
type: string
format: uuid
description: a Job's universally unique identifier (uuid).
user:
type: string
description: 'user identifier, as displayed by the username.'
status:
$ref: '#/components/schemas/JobStatus'
failed_reason:
description: 'displays the database error message, if something went wrong.'
type: string
- $ref: '#/components/schemas/Timestamps'
example:
job_id: de305d54-75b4-431b-adb2-eb6b9e546014
user: username
status: pending
query: UPDATE nasdaq SET price = '$101.00' WHERE company = 'CARTO'
created_at: '2017-12-15T07:36:25Z'
updated_at: '2017-12-15T07:36:25Z'
OutputFormat:
title: Output format
type: string
enum:
- GPKG
- CSV
- SHP
- SVG
- KML
- SpatiaLite
- GeoJSON
description: Output format
JobStatus:
title: Job status
type: string
enum:
- pending
- running
- done
- failed
- canceled
- unknown
description: displays the result of the long-running statement
SQLStatementString:
title: SQL statement
type: string
SQLSingleStatement:
type: object
properties:
query:
$ref: '#/components/schemas/SQLStatementString'
required:
- query
CreateJobQueryField:
type: object
properties:
query:
oneOf:
- $ref: '#/components/schemas/SQLStatementString'
- $ref: '#/components/schemas/ArrayOfSQLStatements'
- $ref: '#/components/schemas/CreateJobQueryFieldWithFallbacks'
description: long-running SQL statement(s).
required:
- query
example:
query: UPDATE nasdaq SET price = '$101.00' WHERE company = 'CARTO'
ArrayOfSQLStatements:
title: Array of SQL statements
type: array
items:
$ref: '#/components/schemas/SQLStatementString'
CreateJobQueryFieldWithFallbacks:
title: Array of SQL statements with Fallbacks
allOf:
- $ref: '#/components/schemas/Fallbacks'
- type: object
properties:
query:
type: array
items:
allOf:
- type: object
properties:
query:
$ref: '#/components/schemas/SQLStatementString'
- $ref: '#/components/schemas/Fallbacks'
required:
- query
SQLMultipleStatements:
type: array
items:
$ref: '#/components/schemas/StatementAndStatus'
SQLMultipleStatementsWithFallbacks:
allOf:
- type: object
properties:
query:
type: array
items:
$ref: '#/components/schemas/StatementAndStatusAndFallbacks'
- $ref: '#/components/schemas/Fallbacks'
StatementAndStatus:
title: SQL statement and status
type: object
properties:
query:
$ref: '#/components/schemas/SQLStatementString'
status:
$ref: '#/components/schemas/JobStatus'
StatementAndStatusAndFallbacks:
allOf:
- $ref: '#/components/schemas/StatementAndStatus'
- $ref: '#/components/schemas/Fallbacks'
Fallbacks:
type: object
properties:
onsuccess:
$ref: '#/components/schemas/SQLStatementString'
onerror:
$ref: '#/components/schemas/SQLStatementString'
SQLGeneralStatment:
type: object
properties:
query:
oneOf:
- $ref: '#/components/schemas/SQLStatementString'
- $ref: '#/components/schemas/SQLMultipleStatements'
- $ref: '#/components/schemas/SQLMultipleStatementsWithFallbacks'
description: long-running SQL statement(s).
JobQueryField:
type: object
properties:
query:
oneOf:
- $ref: '#/components/schemas/SQLStatementString'
- $ref: '#/components/schemas/SQLMultipleStatements'
Timestamps:
type: object
properties:
created_at:
type: string
format: date-time
description: the date and time when the job schema was created
updated_at:
type: string
format: date-time
description: >-
the date and time of when the job schema was last updated, or
modified.
securitySchemes:
ApiKeyHTTPBasicAuth:
type: http
scheme: basic
ApiKeyQueryParam:
type: apiKey
in: header
name: api_key
parameters:
jobId:
in: path
name: job_id
required: true
schema:
type: string
format: uuid
description: the job universally unique identifier (uuid).
responses:
NotFound:
description: The specified resource was not found
Unauthorized:
description: Unauthorized. No authentication provided.
Forbidden:
description: Forbidden. The API key does not authorize this request.
BadInput:
description: Request's parameters error
PlatformLimits:
description: You are over platform's limits.