How can we help you?

Popular searches
ExportWorkflowCatalog
HomeTechnical

Get a token, make a first call and find your accounts: ten minutes to get started with the Grand Shooting REST API.

The Grand Shooting API is a REST API that exchanges JSON. It gives access to the same data as the application: Catalog, Productions, media, Specifications, stock, publication.

  • Base URL: https://api.grand-shooting.com/v3
  • Format: JSON (Content-Type: application/json), except file uploads (multipart/form-data)
  • Complete reference: api.grand-shooting.com, OpenAPI specification at /swagger.json

1. Get an API token

A token (called "API key" in the interface) belongs to an API user of your account. An administrator of the account creates it in the account administration, Team > API menu, with Add an API key.

Two levels of rights:

RightWhat it allows
apiRead and write
api_roRead only: POST, PUT, PATCH and DELETE requests are rejected (401)

Choose api_ro whenever the integration only reads (reporting, synchronization to a DAM): if the token leaks, it cannot change anything.

The token is shown only once, when it is created: keep it in a secrets vault, never in the code. It does not expire: it stays valid as long as the API user is active. To revoke it, block the key in Team > API.

2. First call

The token goes in the Authorization header, after Bearer:

curl -H "Authorization: Bearer $GS_TOKEN" https://api.grand-shooting.com/v3/account/me

/account/me describes the user of the token and the accounts it can access. For each account, the api_host field gives the API address to use: the platform runs on several servers, and an account can be served by another address than api.grand-shooting.com (for example https://api-19.grand-shooting.com). Read api_host when your integration starts instead of hard-coding the address.

3. Read data

List the Productions of the account:

curl -H "Authorization: Bearer $GS_TOKEN" https://api.grand-shooting.com/v3/production

Search the approved media (picturestatus 50) modified since October 1st, most recent first:

curl -i -H "Authorization: Bearer $GS_TOKEN" \
  "https://api.grand-shooting.com/v3/picture?picturestatus=50&date_mod=gte:2026-10-01&sort_by=-date_mod"

The -i option shows the response headers: X-Total-Count gives the total number of results. Pagination, filters and statuses are explained in API concepts.

4. Write data

Create or update a Reference of the Catalog (the Reference is identified by ref: if it exists, it is updated):

curl -X POST -H "Authorization: Bearer $GS_TOKEN" -H "Content-Type: application/json" \
  -d '{"ref":"SS26-DRESS-110","smalltext":"Boho dress"}' \
  https://api.grand-shooting.com/v3/reference

Upload a photo to the Live step of a Production:

curl -X POST -H "Authorization: Bearer $GS_TOKEN" -F "file=@photo.jpg" -F "path=/" \
  https://api.grand-shooting.com/v3/production/{bench_root_id}/bench/{bench_id}/upload

Or have Grand Shooting fetch files from their URLs (up to 200 per call), linking them directly to a Reference:

curl -X POST -H "Authorization: Bearer $GS_TOKEN" -H "Content-Type: application/json" \
  -d '{"urls":[{"url":"https://cdn.example.com/a.jpg","filename":"a.jpg","ref":"SS26-DRESS-110"}]}' \
  https://api.grand-shooting.com/v3/production/{bench_root_id}/bench/{bench_id}/upload/url

5. Act on behalf of another account

A service provider (studio, producer) often works on behalf of its customers. If the customer has given it a delegation, its token can act on the customer's account: add the account_id header with the id of the target account.

curl -H "Authorization: Bearer $GS_TOKEN" -H "account_id: 57" https://api.grand-shooting.com/v3/production

Without this header, requests apply to the token's account. The accessible accounts are listed by /account/me.

Next steps

  • API concepts: objects, statuses, pagination, filters, errors.
  • Cookbooks: common integrations, step by step.
  • Webhooks: get notified of changes instead of polling the API.

The API also accepts OAuth tokens, obtained by an OAuth application: they are sent with the access_token prefix (Authorization: access_token <token>) instead of Bearer. The rest of the API is the same.