API referenceProfile Imports
List profile imports
Newest first. Search matches the file name.
GET
Newest first. Search matches the file name.
apiKey readheader
AuthorizationBearer <token>A workspace API key (pf_…), created under Developers → API keys.
Scope: read
page?integerStarts at 1
Range
1 <= valueDefault
1pageSize?numberOne of 10, 25, 50, 100
Default
25q?stringSearch
Length
1 <= length <= 200status?stringComma-separated, any of: uploading, ready, checking, importing, completed, failed, cancelled
OK
application/json- response
items*array<>total*integerpage*integerpageSize*integercurl -X GET 'https://api.postforge.dev/v1/profile-imports'{ "items": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "status": "uploading", "format": "csv", "delimiter": "string", "bytes": 0, "columns": [ { "name": "string", "samples": [ "string" ], "suggested": { "kind": "email" }, "suggestedType": "text", "refusedByType": { "text": 0, "number": 0, "boolean": 0, "date": 0, "list": 0, "json": 0 }, "sampled": 0 } ], "previewRows": [ { "property1": "string", "property2": "string" } ], "mapping": [ { "column": "string", "target": { "kind": "email" } } ], "options": { "matchOn": "email", "mode": "create_and_update", "blanks": "keep", "startAutomations": true }, "consent": { "method": "string", "declaredBy": { "kind": "user", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string" }, "declaredAt": "2019-08-24T14:15:22Z" }, "check": { "rows": 0, "created": 0, "updated": 0, "unchanged": 0, "skipped": 0, "skipReasons": { "no_match_value": 0, "invalid_email": 0, "invalid_phone": 0, "invalid_external_id": 0, "not_found": 0, "exists": 0, "two_profiles": 0, "other_id": 0, "not_utf8": 0, "unreadable": 0 }, "refused": [ { "column": "string", "count": 0, "reason": "string" } ], "subscribed": 0, "unsubscribed": 0, "consentKept": { "unsubscribed": 0, "suppressed": 0, "no_declaration": 0, "no_email": 0, "invalid": 0, "invalid_date": 0 } }, "checkedAt": "2019-08-24T14:15:22Z", "counts": { "rows": 0, "created": 0, "updated": 0, "unchanged": 0, "skipped": 0, "skipReasons": { "no_match_value": 0, "invalid_email": 0, "invalid_phone": 0, "invalid_external_id": 0, "not_found": 0, "exists": 0, "two_profiles": 0, "other_id": 0, "not_utf8": 0, "unreadable": 0 }, "refused": [ { "column": "string", "count": 0, "reason": "string" } ], "subscribed": 0, "unsubscribed": 0, "consentKept": { "unsubscribed": 0, "suppressed": 0, "no_declaration": 0, "no_email": 0, "invalid": 0, "invalid_date": 0 } }, "error": "unreadable", "createdBy": { "user": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string" }, "apiKey": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string" } }, "createdAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "completedAt": "2019-08-24T14:15:22Z" } ], "total": 0, "page": 0, "pageSize": 0}Restore an archived custom field POST
Previous Page
Start a profile import POST
Either a file (CSV with a header row, comma, semicolon or tab separated, or JSON Lines; UTF-8; up to 100 MB): the answer says how to split it into parts for `upload-part`, then `complete-upload`. Or up to 10,000 rows as JSON objects, read right away. Then map the columns (`update`), `check` and `start`.