API
URLs
The api endpoint is /api/.
Example:
curl -v http://localhost/api/ping/
Authentication
Each call to the API must provide a valid API Key.
API Keys are created in the User Interface (sidebar / API Key), with a short keyname and a secret.
Remember to use HTTPS when publishing Cavaliba.
Permission model
Each API Key has a set of permissions.
These permissions are configured in the ACL Text Field of each API Key.
You provide a list of permissions which are concatenated. You can use a ! to remove (negate) a set of permissions.
Example:
## ACL
p_info
p_data_site_read
p_data_app_read
!p_data_app_read
role:role_test01
Special
- special authorization : timerange, IP range
cavctl
CAVCTL is a standalone executable that wraps calls to the API with a human-friendly CLI.
See the dedicated page.
Endpoints
- /api/ping/
- /api/version/
- /api/info/
- /api/users/
- /api/schemas/
- /api/assets/
Options
- o=[json|yaml|txt]
- id=
- schema=SCHEMA_NAME
- page=
- size=
- search=SEARCH_PATTERN
Examples
curl http://localhost/api/
curl -v http://localhost/api/
curl http://localhost/api/ping/
curl -H "X-Cavaliba-Key: test a_secret_key" http://localhost/api/version/
curl -H "X-Cavaliba-Key: test a_secret_key" http://localhost/api/info/
curl -H "X-Cavaliba-Key: test a_secret_key" \
http://localhost/api/assets/?search=anc&page=1&size=10&o=json
curl -XPOST \
-H "X-Cavaliba-Key: key1 ktest1" \
-H 'Content-Type: text/x-yaml' \
-H 'Accept: application/json' \
http://localhost/api/import/ \
--data-binary @/tmp/test.yaml
curl -XPOST \
-H "X-Cavaliba-Key: key1 ktest1" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
http://localhost/api/import/ \
--data-binary @/tmp/test.json
curl -XPOST -H "X-Cavaliba-Key: key1 ktest1" \
--header "Content-Type: text/csv" \
--data-binary "@/tmp/test.csv" \
"http://localhost/api/csv/?pipeline=pipe0&delimiter=,"
Web configuration
You may check your current nginx.conf. If you’ve upgrade Cavaliba from an old version (3.26 and earlier), you need to add the proper location as described here. You may download a newer release to see a complete configuration.
The key point is to make the /api/ endpoint available without OAUTH2 or other Basic Authentication scheme. API Authentication is based on headers and shared secrets.
# -----------------------
# cavaliba api
# -----------------------
location /api/ {
# no SAM/OIDC/OAUTH2 authentication
# no middleware authentication (Basic Auth / Digest)
# for API / file upload:
client_max_body_size 20M;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
real_ip_header X-Real-IP;
#proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_http_version 1.1;
proxy_pass http://cavaliba_app;
}