Imports

Import custom field values

Accepts up to 50,000 rows — each one project's custom-field values — and applies them in the background. Poll GET /imports/custom-fields/{importId} for progress and read per-row outcomes from GET /imports/custom-fields/{importId}/rows.

A row is exactly one PATCH /projects/{projectId}/custom-fields, executed later. Its custom_fields are the same merge: only the fields a row names are written, "value": null clears one, and a row whose values fail validation leaves that project untouched. Anything you can import you can also PATCH; the import adds one request per refresh, server-side pacing, and a durable per-row ledger — nothing else.

The body is validated whole before anything is stored: a malformed row, a project named by more than one row, or more rows than the cap is a 422 and no import is created. Whether each project exists, is accessible, and accepts each value is decided per row, later, and reported on the row rather than here — the import itself always completes.

A row whose values already match what is stored is recorded unchanged without a write, so re-sending your whole system of record every cycle costs only its differences.

Your organization's imports run one at a time, in submission order, so consecutive refreshes never interleave. The fields you send belong to your integration: each run overwrites any value entered in Rabbet since the last one, for exactly those fields.

Requires the permission to edit project settings — the one every row needs — and is refused up front without it.

Idempotency

Send an Idempotency-Key. A retried submission with the same key replays the original 202, import id included, instead of creating a second import. Re-applying a custom-field import is a no-op by construction, so a duplicate wastes work rather than corrupting anything, but the key keeps your ledger to one import per refresh. Key semantics are those of POST /projects.

Retention

Imports and their rows are kept for 7 days, then deleted.

post/imports/custom-fields

Request

  • Base URL: https://api.rabbet.com/v1
  • URL: https://api.rabbet.com/v1/imports/custom-fields
  • Auth: OAuth 2 (client credentials, token URL https://api.rabbet.com/oauth/token, scopes: write)

Headers

Idempotency-Keystring

Client-supplied key making this request idempotent. Reuse the same value (for the same body) to safely retry without creating a second import.

Request body

Example request

{
  "rows": [
    {
      "project_id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "custom_fields": [
        {
          "id": "b308e77f-6d1d-47c4-bd1f-0069cc548315",
          "value": "PN123"
        }
      ]
    }
  ]
}

Response

Import accepted and queued (or original response replayed for a reused Idempotency-Key).

Example response

{
  "data": {
    "id": "0199300a-6f6e-7c7e-9d3e-2f4a8b1c5d6e",
    "row_count": 10000
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.