API reference

Records

Upload a record, run AI extraction, review and confirm the result, link or unlink people, and move records to the Trash.

Paths are relative to https://kleiobase.com/api/v1.

get/workspaces/{workspace_id}/records

List records

Each record carries folder_id and tag_ids. Use ids to poll a batch of records in one read.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
limitquerynoPage size. Default 25, max 100.
cursorquerynoThe next_cursor of the previous page. Opaque.
statusquerynoFilter by status.
folder_idquerynoOnly records in this folder.
tag_idquerynoOnly records with this tag.
idsquerynoOnly these records: 1 to 50 comma-separated record ids. Ids not in the workspace are left out.

Responses

  • 200 A page of records. (RecordList)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan. (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: folder_id or tag_id is not in this workspace. (ErrorResponse)
  • 422 Invalid limit, cursor, status, folder_id, tag_id or ids, or folder_id is a folder of people. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "workspace_id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "review",
              "confirmed",
              "failed"
            ]
          },
          "title": {
            "type": "string"
          },
          "original_filename": {
            "type": "string"
          },
          "record_type": {
            "type": [
              "string",
              "null"
            ]
          },
          "file_type": {
            "type": "string"
          },
          "transcription": {
            "type": "object",
            "properties": {
              "original": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "translated": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "original",
              "translated"
            ]
          },
          "created_at": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "folder_id": {
            "description": "The folder the record is in (null: none). Returned by GET .../records.",
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "tag_ids": {
            "description": "Ids of the record's tags. Returned by GET .../records.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "id",
          "workspace_id",
          "status",
          "title",
          "original_filename",
          "record_type",
          "file_type",
          "transcription",
          "created_at",
          "updated_at"
        ]
      }
    },
    "next_cursor": {
      "description": "Pass as ?cursor to get the next page. Null on the last page.",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "data",
    "next_cursor"
  ]
}
post/workspaces/{workspace_id}/records

Upload a record

Multipart upload of a JPG or PNG. The record is created as pending; call POST .../process next. Uploads are NOT idempotent: a retry creates another record, and Idempotency-Key is ignored. Counts against both the request and the upload rate limits.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
Request body (multipart/form-data, required)
{
  "type": "object",
  "required": [
    "file"
  ],
  "properties": {
    "file": {
      "type": "string",
      "format": "binary",
      "description": "JPG or PNG image."
    },
    "source_text": {
      "type": "string",
      "description": "Optional text transcription of the image."
    },
    "source_text_layout": {
      "type": "string",
      "description": "Optional layout hint for source_text."
    }
  }
}

Responses

  • 201 The created record, in pending. (Record)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). (ErrorResponse)
  • 422 Not multipart, no valid file, wrong type or size, or other upload checks failed. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. Also: the upload burst limit was hit. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
201 response schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "workspace_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "processing",
        "review",
        "confirmed",
        "failed"
      ]
    },
    "title": {
      "type": "string"
    },
    "original_filename": {
      "type": "string"
    },
    "record_type": {
      "type": [
        "string",
        "null"
      ]
    },
    "file_type": {
      "type": "string"
    },
    "transcription": {
      "type": "object",
      "properties": {
        "original": {
          "type": [
            "string",
            "null"
          ]
        },
        "translated": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "original",
        "translated"
      ]
    },
    "created_at": {
      "type": "string"
    },
    "updated_at": {
      "type": "string"
    },
    "folder_id": {
      "description": "The folder the record is in (null: none). Returned by GET .../records.",
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "tag_ids": {
      "description": "Ids of the record's tags. Returned by GET .../records.",
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    }
  },
  "required": [
    "id",
    "workspace_id",
    "status",
    "title",
    "original_filename",
    "record_type",
    "file_type",
    "transcription",
    "created_at",
    "updated_at"
  ]
}
get/workspaces/{workspace_id}/records/{record_id}

Get a record

Poll this after POST .../process until status is review or failed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.

Responses

  • 200 The record. (Record)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan. (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record does not exist or is not visible. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "workspace_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "processing",
        "review",
        "confirmed",
        "failed"
      ]
    },
    "title": {
      "type": "string"
    },
    "original_filename": {
      "type": "string"
    },
    "record_type": {
      "type": [
        "string",
        "null"
      ]
    },
    "file_type": {
      "type": "string"
    },
    "transcription": {
      "type": "object",
      "properties": {
        "original": {
          "type": [
            "string",
            "null"
          ]
        },
        "translated": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "original",
        "translated"
      ]
    },
    "created_at": {
      "type": "string"
    },
    "updated_at": {
      "type": "string"
    },
    "folder_id": {
      "description": "The folder the record is in (null: none). Returned by GET .../records.",
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "tag_ids": {
      "description": "Ids of the record's tags. Returned by GET .../records.",
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    }
  },
  "required": [
    "id",
    "workspace_id",
    "status",
    "title",
    "original_filename",
    "record_type",
    "file_type",
    "transcription",
    "created_at",
    "updated_at"
  ]
}
patch/workspaces/{workspace_id}/records/{record_id}

Edit a record's title or type

At least one of title and record_type. There is no date field: dates live in the extraction. Changing record_type returns 409 while the record is processing. Replays of an Idempotency-Key return the original body and request_id; headers are not replayed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.
Idempotency-KeyheadernoMakes the write safe to retry (1-255 characters, kept 24 hours). Same key and same request replays the original response; a different request with the same key is a 409.
Request body (application/json, required)
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "record_type": {
      "type": "string",
      "enum": [
        "birth",
        "marriage",
        "death",
        "census",
        "immigration",
        "emigration",
        "military",
        "naturalization",
        "probate",
        "will",
        "letter",
        "other"
      ]
    }
  },
  "additionalProperties": false
}

Responses

  • 200 The updated record. (Record)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record does not exist or is not visible. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). Also: Idempotency-Key was reused with a different request, or a request with it is still in progress. Also: The record type cannot change while the record is processing. (ErrorResponse)
  • 422 Validation failed. A bad Idempotency-Key (1-255 characters) is also a 422. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "workspace_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "processing",
        "review",
        "confirmed",
        "failed"
      ]
    },
    "title": {
      "type": "string"
    },
    "original_filename": {
      "type": "string"
    },
    "record_type": {
      "type": [
        "string",
        "null"
      ]
    },
    "file_type": {
      "type": "string"
    },
    "transcription": {
      "type": "object",
      "properties": {
        "original": {
          "type": [
            "string",
            "null"
          ]
        },
        "translated": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "original",
        "translated"
      ]
    },
    "created_at": {
      "type": "string"
    },
    "updated_at": {
      "type": "string"
    },
    "folder_id": {
      "description": "The folder the record is in (null: none). Returned by GET .../records.",
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "tag_ids": {
      "description": "Ids of the record's tags. Returned by GET .../records.",
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    }
  },
  "required": [
    "id",
    "workspace_id",
    "status",
    "title",
    "original_filename",
    "record_type",
    "file_type",
    "transcription",
    "created_at",
    "updated_at"
  ]
}
delete/workspaces/{workspace_id}/records/{record_id}

Move a record to Trash

No body. The record can be restored with POST .../trash/restore. Replays of an Idempotency-Key return the original body and request_id; headers are not replayed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.
Idempotency-KeyheadernoMakes the write safe to retry (1-255 characters, kept 24 hours). Same key and same request replays the original response; a different request with the same key is a 409.

Responses

  • 200 Moved to Trash. (Ok)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record does not exist or is not visible. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). Also: Idempotency-Key was reused with a different request, or a request with it is still in progress. Also: The record is still being processed. (ErrorResponse)
  • 422 Validation failed. A bad Idempotency-Key (1-255 characters) is also a 422. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "const": true
    }
  },
  "required": [
    "ok"
  ]
}
post/workspaces/{workspace_id}/records/delete

Move many records to Trash

All or nothing: every id must be a live record in this workspace and none may be processing, or nothing is moved. Replays of an Idempotency-Key return the original body and request_id; headers are not replayed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
Idempotency-KeyheadernoMakes the write safe to retry (1-255 characters, kept 24 hours). Same key and same request replays the original response; a different request with the same key is a 409.
Request body (application/json, required)
{
  "type": "object",
  "properties": {
    "ids": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      }
    }
  },
  "required": [
    "ids"
  ],
  "additionalProperties": false
}

Responses

  • 200 Moved to Trash. (BulkTrashed)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: A record does not exist, is not visible, or is already in Trash. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). Also: Idempotency-Key was reused with a different request, or a request with it is still in progress. Also: A record is still being processed. (ErrorResponse)
  • 422 Validation failed. A bad Idempotency-Key (1-255 characters) is also a 422. Also: Invalid body: 1 to 100 UUIDs. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "const": true
    },
    "ids": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      },
      "description": "The ids moved to the Trash (all of the ones sent)."
    }
  },
  "required": [
    "ok",
    "ids"
  ]
}
get/workspaces/{workspace_id}/records/{record_id}/image

Get a signed image URL

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.
variantquerynooriginal (default): the uploaded file. thumbnail: the stored 1000 px WebP preview.

Responses

  • 200 A signed URL valid for 5 minutes. (RecordImage)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan. (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record does not exist or is not visible, or (variant=thumbnail) it has no stored thumbnail. (ErrorResponse)
  • 422 Invalid variant. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Signed URL of the original image."
    },
    "expires_at": {
      "type": "string",
      "description": "The URL stops working at this time (5 minutes after issue)."
    }
  },
  "required": [
    "url",
    "expires_at"
  ]
}
post/workspaces/{workspace_id}/records/{record_id}/process

Start AI extraction

Asynchronous. Returns 202 once credits are charged; the extraction then runs in the background. Poll GET .../records/{record_id} until status is review or failed. A 409 'already being processed' can last up to about 35 minutes after a crashed run, until the cleanup sweep recovers it. Replays of an Idempotency-Key return the original body and request_id; headers are not replayed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.
Idempotency-KeyheadernoMakes the write safe to retry (1-255 characters, kept 24 hours). Same key and same request replays the original response; a different request with the same key is a 409.
Request body (application/json)
{
  "type": "object",
  "properties": {
    "deep": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}

Responses

  • 202 Processing started. (RecordProcessAccepted)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 402 Not enough credits. details has used, limit, credits_remaining and shortfall. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record does not exist or is not visible. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). Also: Idempotency-Key was reused with a different request, or a request with it is still in progress. Also: The record is not in a processable state, or it is already being processed. (ErrorResponse)
  • 422 Validation failed. A bad Idempotency-Key (1-255 characters) is also a 422. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. Also: too many records are processing at once. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
202 response schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "status": {
      "type": "string",
      "const": "processing"
    }
  },
  "required": [
    "id",
    "status"
  ]
}
get/workspaces/{workspace_id}/records/{record_id}/extraction

Get the extraction

For review before confirm, and still readable after it.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.

Responses

  • 200 The stored extraction. (ExtractionResponse)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan. (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record does not exist or is not visible. (ErrorResponse)
  • 409 The record has no extraction yet (pending, processing or failed). (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "record_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "extraction": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "The stored extraction (see the Extraction schema), or null when nothing is stored."
    }
  },
  "required": [
    "record_id",
    "extraction"
  ]
}
patch/workspaces/{workspace_id}/records/{record_id}/extraction

Replace the extraction

Send the whole edited extraction. Nothing is created until you confirm. Replays of an Idempotency-Key return the original body and request_id; headers are not replayed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.
Idempotency-KeyheadernoMakes the write safe to retry (1-255 characters, kept 24 hours). Same key and same request replays the original response; a different request with the same key is a 409.
Request body (application/json, required)
{
  "type": "object",
  "properties": {
    "extraction": {
      "type": "object",
      "properties": {
        "individuals": {
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "_id": {
                "type": "string",
                "maxLength": 100
              },
              "role": {
                "type": "string",
                "enum": [
                  "CHIL",
                  "CLERGY",
                  "FATH",
                  "FRIEND",
                  "GODP",
                  "HUSB",
                  "MOTH",
                  "MULTIPLE",
                  "NGHBR",
                  "OFFICIATOR",
                  "PARENT",
                  "SPOU",
                  "WIFE",
                  "WITN",
                  "OTHER"
                ]
              },
              "names": {
                "maxItems": 100,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "given": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "surname": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "surname_prefix": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "prefix": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "suffix": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "nickname": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "type": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 100
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "additionalProperties": {}
                }
              },
              "sex": {
                "type": "string",
                "enum": [
                  "M",
                  "F",
                  "X",
                  "U"
                ]
              },
              "birth": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "date": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "place": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "age": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cause": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "death": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "date": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "place": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "age": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cause": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "burial": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "date": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "place": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "age": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cause": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "christening": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "date": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "place": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "age": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cause": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "cremation": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "date": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "place": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "age": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cause": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "residence": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "date": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "place": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "age": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cause": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "occupation": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 20000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "occupation_date": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 500
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "religion": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 20000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 20000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "gedcom_facts": {
                "maxItems": 500,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "tag": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "value": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "date": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "place": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "age": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "type": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "notes": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "did_not_occur": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "tag"
                  ],
                  "additionalProperties": {}
                }
              },
              "custom_fields": {
                "maxItems": 500,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "value": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "additionalProperties": {}
                }
              },
              "family_refs": {
                "maxItems": 500,
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 100
                }
              },
              "asso_refs": {
                "maxItems": 500,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "ref": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "CHIL",
                        "CLERGY",
                        "FATH",
                        "FRIEND",
                        "GODP",
                        "HUSB",
                        "MOTH",
                        "MULTIPLE",
                        "NGHBR",
                        "OFFICIATOR",
                        "PARENT",
                        "SPOU",
                        "WIFE",
                        "WITN",
                        "OTHER"
                      ]
                    },
                    "phrase": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "ref",
                    "role"
                  ],
                  "additionalProperties": {}
                }
              },
              "disabled": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "name_confidence": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "high",
                      "medium",
                      "low"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "_id",
              "role",
              "names",
              "sex",
              "asso_refs"
            ],
            "additionalProperties": {}
          }
        },
        "families": {
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "_id": {
                "type": "string",
                "maxLength": 100
              },
              "husband_ref": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "wife_ref": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "children_refs": {
                "maxItems": 500,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "ref": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "pedi": {
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "ADOPTED",
                            "BIRTH",
                            "FOSTER",
                            "SEALING",
                            "OTHER"
                          ]
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "ref"
                  ],
                  "additionalProperties": {}
                }
              },
              "marriage": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "date": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "place": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "age": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cause": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "marriage_type": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 20000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "divorce": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "date": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "place": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "age": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cause": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 20000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "gedcom_facts": {
                "maxItems": 500,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "tag": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "value": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "date": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "place": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "age": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "type": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "notes": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 20000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "did_not_occur": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "tag"
                  ],
                  "additionalProperties": {}
                }
              }
            },
            "required": [
              "_id",
              "children_refs"
            ],
            "additionalProperties": {}
          }
        },
        "record_type": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "BIRT",
                "MARR",
                "DEAT",
                "CENS",
                "IMMI",
                "EMIG",
                "MILI",
                "NATU",
                "PROB",
                "WILL",
                "LETT",
                "OTHR"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "event": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "date": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 500
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "place": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 20000
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "age": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 500
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "cause": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 20000
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "notes": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 20000
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ]
        },
        "display_name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 20000
            },
            {
              "type": "null"
            }
          ]
        },
        "transcription_original": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 500000
            },
            {
              "type": "null"
            }
          ]
        },
        "transcription_literal": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 500000
            },
            {
              "type": "null"
            }
          ]
        },
        "translation_english": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 500000
            },
            {
              "type": "null"
            }
          ]
        },
        "document_facts": {
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "tag": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "value": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 20000
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": {}
          }
        },
        "extraction_reliability": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "high",
                "low"
              ]
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "individuals",
        "families"
      ],
      "additionalProperties": {}
    }
  },
  "required": [
    "extraction"
  ],
  "additionalProperties": false
}

Responses

  • 200 The stored extraction. (ExtractionResponse)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record does not exist or is not visible. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). Also: Idempotency-Key was reused with a different request, or a request with it is still in progress. Also: The record is not in review. (ErrorResponse)
  • 422 Validation failed. A bad Idempotency-Key (1-255 characters) is also a 422. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "record_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "extraction": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "The stored extraction (see the Extraction schema), or null when nothing is stored."
    }
  },
  "required": [
    "record_id",
    "extraction"
  ]
}
post/workspaces/{workspace_id}/records/{record_id}/confirm

Confirm a reviewed record

Creates people, links and families from the stored extraction. Without an Idempotency-Key, a retry after success returns 409 because the record is already confirmed. Replays of an Idempotency-Key return the original body and request_id; headers are not replayed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.
Idempotency-KeyheadernoMakes the write safe to retry (1-255 characters, kept 24 hours). Same key and same request replays the original response; a different request with the same key is a 409.

Responses

  • 200 Confirmed. Returns the linked people. (RecordConfirmed)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). Also: confirming would exceed the plan's person limit (details has used, limit, attempted). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record does not exist or is not visible. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). Also: Idempotency-Key was reused with a different request, or a request with it is still in progress. Also: The record is not in review, or it has no extraction. (ErrorResponse)
  • 422 Validation failed. A bad Idempotency-Key (1-255 characters) is also a 422. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "const": true
    },
    "person_ids": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      },
      "description": "People linked to the record after confirming."
    }
  },
  "required": [
    "ok",
    "person_ids"
  ]
}
post/workspaces/{workspace_id}/records/{record_id}/people

Link a person to a record

Matching is queued, never run inline. Replays of an Idempotency-Key return the original body and request_id; headers are not replayed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.
Idempotency-KeyheadernoMakes the write safe to retry (1-255 characters, kept 24 hours). Same key and same request replays the original response; a different request with the same key is a 409.
Request body (application/json, required)
{
  "type": "object",
  "properties": {
    "person_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "role": {
      "type": "string",
      "enum": [
        "CHIL",
        "CLERGY",
        "FATH",
        "FRIEND",
        "GODP",
        "HUSB",
        "MOTH",
        "MULTIPLE",
        "NGHBR",
        "OFFICIATOR",
        "PARENT",
        "SPOU",
        "WIFE",
        "WITN",
        "OTHER"
      ]
    }
  },
  "required": [
    "person_id"
  ],
  "additionalProperties": false
}

Responses

  • 201 Linked. (RecordLinked)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record or person does not exist or is not visible. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). Also: Idempotency-Key was reused with a different request, or a request with it is still in progress. Also: The person is already linked to this record. (ErrorResponse)
  • 422 Validation failed. A bad Idempotency-Key (1-255 characters) is also a 422. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
201 response schema
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "const": true
    },
    "record_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "person_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "ok",
    "record_id",
    "person_id"
  ]
}
delete/workspaces/{workspace_id}/records/{record_id}/people

Unlink a person from a record

Replays of an Idempotency-Key return the original body and request_id; headers are not replayed.

NameInRequiredDescription
workspace_idpathyesThe workspace (project) id.
record_idpathyesThe record id.
Idempotency-KeyheadernoMakes the write safe to retry (1-255 characters, kept 24 hours). Same key and same request replays the original response; a different request with the same key is a 409.
Request body (application/json, required)
{
  "type": "object",
  "properties": {
    "person_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "person_id"
  ],
  "additionalProperties": false
}

Responses

  • 200 Unlinked. (Ok)
  • 401 Missing, malformed, unknown or revoked API key. (ErrorResponse)
  • 403 The account has no paid plan, or the key is read-only (a read_write key is required). (ErrorResponse)
  • 404 The workspace does not exist or is not visible to this key's owner. Also: The record or person does not exist, or they are not linked. (ErrorResponse)
  • 409 The workspace is archived (writes are refused). Also: Idempotency-Key was reused with a different request, or a request with it is still in progress. (ErrorResponse)
  • 422 Validation failed. A bad Idempotency-Key (1-255 characters) is also a 422. (ErrorResponse)
  • 429 Rate limit exceeded. Wait the number of seconds in Retry-After. (ErrorResponse)
  • 500 Unexpected error. Retry later and quote request_id if it persists. (ErrorResponse)
200 response schema
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "const": true
    }
  },
  "required": [
    "ok"
  ]
}

We use cookies and similar technologies. Essential cookies keep the site working and secure. We only load analytics (PostHog, including masked session replays) and marketing (Meta Pixel and TikTok Pixel) with your consent. See our Privacy Policy.