Aller au contenu

Ressources

Organisations

Chaque point de terminaison Organisations, avec la portée qu'il impose, le corps qu'il accepte, une réponse lisible et les refus qu'il peut renvoyer.

Lister les organisations pour lesquelles cette clé peut agir.

get/organizations
Portée
Aucune portée requise
Idempotency-Key
Non accepté
Renvoie
200
Requête
curl "https://passportcraft.com/api/v1/organizations" \
  -H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"
Réponse · 200
{
  "object": "list",
  "data": [
    {
      "object": "connection",
      "organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
      "name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
      "display_name": "Atelier Nord",
      "link_status": null,
      "scopes": [
        "passports:read",
        "passports:write",
        "keys:admin"
      ],
      "granted_at": "2026-07-14T11:02:19.004Z"
    },
    {
      "object": "connection",
      "organization_id": "3c59dc04-8f7b-4d0e-9c1a-5f2b6e7d8a90",
      "name": "organizations/3c59dc04-8f7b-4d0e-9c1a-5f2b6e7d8a90",
      "display_name": "Acme Apparel",
      "link_status": "accepted",
      "scopes": [
        "passports:read",
        "passports:write"
      ],
      "granted_at": "2026-09-22T08:15:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

GET /organizations

Donner à une clé l'accès à une organisation cliente.

post/organizations/{organization}/grants
Portée
keys:admin
Idempotency-Key
Non accepté
Renvoie
201

Paramètres de chemin

organizationchaîneObligatoire

L'organisation cliente. La clé appelante doit disposer de la portée keys:admin sur sa propre organisation, et son organisation doit gérer ce client ; la clé n'a besoin d'aucune autorisation ici.

Corps de la requête

key_idchaîneObligatoire

L'identifiant public d'une clé appartenant à votre organisation, dans le même mode que la clé appelante, tel que GET /whoami l'indique dans key_id.

scopestableau de chaînesObligatoire

Ce que la clé peut faire dans cette organisation. Chaque portée doit être permise par les portées que la clé détient sur sa propre organisation (une portée d'écriture permet aussi la portée de lecture correspondante) ; la portée keys:admin n'est jamais accordée pour un client.

Erreurs

Tous les refus que ce point de terminaison peut renvoyer, avec le statut qui les accompagne.

Requête
curl "https://passportcraft.com/api/v1/organizations/3c59dc04-8f7b-4d0e-9c1a-5f2b6e7d8a90/grants" \
  -X POST \
  -H "Authorization: Bearer $PASSPORTCRAFT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "key_id": "K3n9Qw2P",
  "scopes": [
    "passports:read",
    "passports:write"
  ]
}'
Réponse · 201
{
  "object": "grant",
  "organization_id": "3c59dc04-8f7b-4d0e-9c1a-5f2b6e7d8a90",
  "key_id": "K3n9Qw2P",
  "scopes": [
    "passports:read",
    "passports:write"
  ],
  "granted_at": "2026-09-22T08:15:00.000Z"
}

POST /organizations/3c59dc04-8f7b-4d0e-9c1a-5f2b6e7d8a90/grants

Mettre fin à l'accès d'une clé à une seule organisation cliente.

delete/organizations/{organization}/grants/{keyId}
Portée
keys:admin
Idempotency-Key
Non accepté
Renvoie
200

Paramètres de chemin

organizationchaîneObligatoire

L'organisation cliente. La clé appelante doit disposer de la portée keys:admin sur sa propre organisation, et son organisation doit gérer ce client ; la clé n'a besoin d'aucune autorisation ici.

keyIdchaîneObligatoire

L'identifiant de la ressource. Traitez-le comme une chaîne opaque.

Erreurs

Tous les refus que ce point de terminaison peut renvoyer, avec le statut qui les accompagne.

Requête
curl "https://passportcraft.com/api/v1/organizations/3c59dc04-8f7b-4d0e-9c1a-5f2b6e7d8a90/grants/K3n9Qw2P" \
  -X DELETE \
  -H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"
Réponse · 200
{
  "object": "grant",
  "organization_id": "3c59dc04-8f7b-4d0e-9c1a-5f2b6e7d8a90",
  "key_id": "K3n9Qw2P",
  "status": "revoked"
}

DELETE /organizations/3c59dc04-8f7b-4d0e-9c1a-5f2b6e7d8a90/grants/K3n9Qw2P

Décrire ce que cette clé peut faire pour cette organisation.

get/organizations/{organization}/capabilities
Portée
passports:read
Idempotency-Key
Non accepté
Renvoie
200

Paramètres de chemin

organizationchaîneObligatoire

L'organisation pour laquelle cette requête agit. La clé doit disposer d'une autorisation sur celle-ci.

Erreurs

Tous les refus que ce point de terminaison peut renvoyer, avec le statut qui les accompagne.

Requête
curl "https://passportcraft.com/api/v1/organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/capabilities" \
  -H "Authorization: Bearer $PASSPORTCRAFT_API_KEY"
Réponse · 200
{
  "object": "list",
  "data": [
    {
      "object": "capability",
      "id": "passport_publishing",
      "name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/capabilities/passport_publishing",
      "organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
      "livemode": true,
      "requested": true,
      "allowed": true,
      "verification_status": "valid",
      "problems": [],
      "detail": {
        "plan_id": "pro",
        "subscription_status": "trialing",
        "publish_limit": 500,
        "published_count": 37,
        "per_passport_check": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/{id}/validate"
      }
    },
    {
      "object": "capability",
      "id": "france_affichage_filing",
      "name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/capabilities/france_affichage_filing",
      "organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
      "livemode": true,
      "requested": true,
      "allowed": false,
      "verification_status": "pending",
      "problems": [
        {
          "code": "delegation_required",
          "message": "The delegation is awaiting verification against the French portal.",
          "type": "pending",
          "remediating_actions": [
            {
              "code": "await_portal_verification",
              "message": "No action is required. Poll this capability until verification completes."
            }
          ]
        }
      ],
      "detail": {
        "delegation_status": "pending",
        "portal_brand_id": null,
        "delegated_at": "2026-07-30T16:20:00.000Z",
        "entitlement": "free_offer",
        "free_filing_reason": "available",
        "per_passport_requirements": [
          "gtin_required",
          "attestation_required"
        ],
        "attestation_wording_version": "2026-09-19.1",
        "per_passport_check": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/passports/{id}/affichage",
        "api_filing_supported": true,
        "api_filing_scope": "filings:write"
      }
    },
    {
      "object": "capability",
      "id": "document_upload",
      "name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/capabilities/document_upload",
      "organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
      "livemode": true,
      "requested": true,
      "allowed": true,
      "verification_status": "valid",
      "problems": [],
      "detail": {
        "document_limit": 50,
        "documents_used": 12
      }
    },
    {
      "object": "capability",
      "id": "live_api_writes",
      "name": "organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/capabilities/live_api_writes",
      "organization_id": "8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2",
      "livemode": true,
      "requested": true,
      "allowed": false,
      "verification_status": "invalid",
      "problems": [
        {
          "code": "no_subscription",
          "message": "Live API writes start when the trial becomes a paid subscription.",
          "type": "invalid",
          "remediating_actions": [
            {
              "code": "add_subscription",
              "message": "Convert the trial to a paid subscription."
            }
          ]
        }
      ],
      "detail": {
        "subscription_status": "trialing",
        "plan_id": "pro"
      }
    }
  ],
  "has_more": false,
  "next_cursor": null
}

GET /organizations/8f14e45f-ceea-467a-9a5f-8dc7d9c6a1b2/capabilities