{ "opencollection": "1.0.0", "info": { "name": "Opply Activity Feed Buyer self-onboarding API", "version": "0.0.0" }, "items": [ { "info": { "name": "Buyer self-onboarding", "type": "folder" }, "items": [ { "info": { "name": "Update the buyer Business Profile section.", "type": "http" }, "http": { "method": "PATCH", "url": "{{baseUrl}}/api/v1/companies/me/business-profile/update/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Write-only buyer onboarding endpoints scoped to `request.user_company`.\nBusiness profile + IBAN updates land here." }, { "info": { "name": "api_v1_companies_me_delivery_locations_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/delivery-locations/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Short-circuit a buyer-confirmed dedup: when the buyer picked \"Use my\nsaved address\" on a \"might be X\" delivery card, link the external id to\nthat existing address and return it — no new row, and no need for the\nfull required-address validation (we're not creating one)." }, { "info": { "name": "api_v1_companies_me_delivery_locations_match_preview_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/delivery-locations/match-preview/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Preview which discovered delivery addresses the buyer already has\nsaved, so the import review can show \"already saved / might be your saved\naddress\" hints. Results are aligned by index to the request order." }, { "info": { "name": "Update the buyer's IBAN (Banking & payments section).", "type": "http" }, "http": { "method": "PATCH", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-banking/update/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Write-only buyer onboarding endpoints scoped to `request.user_company`.\nBusiness profile + IBAN updates land here." }, { "info": { "name": "api_v1_companies_me_onboarding_compliance_documents_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-compliance-documents/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``POST /companies/me/onboarding-compliance-documents/`` — commit a\nstaged compliance document (e.g. a sales tax exemption certificate).\n\nCopies the scrubbed source file out of the onboarding bucket into a\n``companies.BuyerDocument`` with the matching ``DocumentType``, applies\nany buyer edits from the review screen, and (for sales tax exemptions)\nbest-effort flips ``AccountDetail.tax_exemption_certificate``.\nIdempotent: re-committing the same staged row returns the existing\ndocument." }, { "info": { "name": "api_v1_companies_me_onboarding_extractions_list", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-extractions/", "params": [ { "name": "page", "value": "", "type": "query", "description": "A page number within the paginated result set." }, { "name": "page_size", "value": "", "type": "query", "description": "Number of results to return per page." } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-extractions/`` — the staging table the\nFE persists the agent's proposal to so Step 2 survives a reload.\n\nRe-staging for the same batch destructively overwrites the\nprevious proposal (OneToOne to batch). The FE never re-runs\nextraction silently — every overwrite happens after a new\n``opplyExtractionComplete`` event." }, { "info": { "name": "api_v1_companies_me_onboarding_extractions_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-extractions/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-extractions/`` — the staging table the\nFE persists the agent's proposal to so Step 2 survives a reload.\n\nRe-staging for the same batch destructively overwrites the\nprevious proposal (OneToOne to batch). The FE never re-runs\nextraction silently — every overwrite happens after a new\n``opplyExtractionComplete`` event." }, { "info": { "name": "api_v1_companies_me_onboarding_extractions_retrieve", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-extractions/:uuid/", "params": [ { "name": "uuid", "value": "", "type": "path" } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-extractions/`` — the staging table the\nFE persists the agent's proposal to so Step 2 survives a reload.\n\nRe-staging for the same batch destructively overwrites the\nprevious proposal (OneToOne to batch). The FE never re-runs\nextraction silently — every overwrite happens after a new\n``opplyExtractionComplete`` event." }, { "info": { "name": "api_v1_companies_me_onboarding_ingredients_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-ingredients/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Create `catalog.BuyerItem` rows for the buyer's company. The\npost-onboarding Materials page reads from the same model\n(`/api/v1/catalog/items/`) so anything created here shows up\nimmediately. `kind` discriminates ingredients from packaging." }, { "info": { "name": "api_v1_companies_me_onboarding_ingredients_match_preview_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-ingredients/match-preview/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Preview which discovered materials already exist in the buyer's\ncatalogue, so the import review can show \"already in your materials\"\n(exact — merges at commit) / \"might be your existing X\" (fuzzy) hints.\nScoped to the buyer's own `BuyerItem` rows." }, { "info": { "name": "api_v1_companies_me_onboarding_invoice_batches_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-invoice-batches/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-invoice-batches/`` — create or read a\nbatch the buyer uploads invoices into." }, { "info": { "name": "api_v1_companies_me_onboarding_invoice_batches_retrieve", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-invoice-batches/:uuid/", "params": [ { "name": "uuid", "value": "", "type": "path" } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-invoice-batches/`` — create or read a\nbatch the buyer uploads invoices into." }, { "info": { "name": "api_v1_companies_me_onboarding_invoices_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-invoices/", "body": { "type": "form-urlencoded", "data": [] }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-invoices/`` — multipart upload, read,\nand soft-delete for a single invoice file.\n\nThe bytes themselves are written to a private S3 bucket via\n``invoice_storage.upload_to_private_bucket``; the row stores only\nthe object key. ``content`` returns a 15-minute signed URL when\nthe agent (or the buyer's FE) needs to read the file." }, { "info": { "name": "api_v1_companies_me_onboarding_invoices_retrieve", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-invoices/:uuid/", "params": [ { "name": "uuid", "value": "", "type": "path" } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-invoices/`` — multipart upload, read,\nand soft-delete for a single invoice file.\n\nThe bytes themselves are written to a private S3 bucket via\n``invoice_storage.upload_to_private_bucket``; the row stores only\nthe object key. ``content`` returns a 15-minute signed URL when\nthe agent (or the buyer's FE) needs to read the file." }, { "info": { "name": "api_v1_companies_me_onboarding_invoices_destroy", "type": "http" }, "http": { "method": "DELETE", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-invoices/:uuid/", "params": [ { "name": "uuid", "value": "", "type": "path" } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-invoices/`` — multipart upload, read,\nand soft-delete for a single invoice file.\n\nThe bytes themselves are written to a private S3 bucket via\n``invoice_storage.upload_to_private_bucket``; the row stores only\nthe object key. ``content`` returns a 15-minute signed URL when\nthe agent (or the buyer's FE) needs to read the file." }, { "info": { "name": "Return a short-TTL signed URL the agent uses to read the invoice bytes.", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-invoices/:uuid/content/", "params": [ { "name": "uuid", "value": "", "type": "path" } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "``/companies/me/onboarding-invoices/`` — multipart upload, read,\nand soft-delete for a single invoice file.\n\nThe bytes themselves are written to a private S3 bucket via\n``invoice_storage.upload_to_private_bucket``; the row stores only\nthe object key. ``content`` returns a 15-minute signed URL when\nthe agent (or the buyer's FE) needs to read the file." }, { "info": { "name": "api_v1_companies_me_onboarding_suppliers_list", "type": "http" }, "http": { "method": "GET", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-suppliers/", "params": [ { "name": "page", "value": "", "type": "query", "description": "A page number within the paginated result set." }, { "name": "page_size", "value": "", "type": "query", "description": "Number of results to return per page." } ], "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Create + list `Supplier` rows attached to the buyer's `BuyerOnboarding`.\n\nThe agent commits one row per extracted supplier. The list action backs\nthe post-onboarding \"Suppliers in progress\" tab, which surfaces rows the\nbuyer submitted that the MoR has not yet reviewed (`pending_review`)." }, { "info": { "name": "api_v1_companies_me_onboarding_suppliers_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-suppliers/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Create + list `Supplier` rows attached to the buyer's `BuyerOnboarding`.\n\nThe agent commits one row per extracted supplier. The list action backs\nthe post-onboarding \"Suppliers in progress\" tab, which surfaces rows the\nbuyer submitted that the MoR has not yet reviewed (`pending_review`)." }, { "info": { "name": "api_v1_companies_me_onboarding_suppliers_match_preview_create", "type": "http" }, "http": { "method": "POST", "url": "{{baseUrl}}/api/v1/companies/me/onboarding-suppliers/match-preview/", "body": { "type": "json", "data": "{}" }, "auth": { "type": "apikey", "key": "Authorization", "value": "{{Authorization}}", "placement": "header" } }, "docs": "Preview which discovered suppliers the buyer ALREADY has — onboarded,\nmid-onboarding, or a pending submission — so the import review can show\n\"you already have this / it's already being set up\" hints before commit.\n\nScoped to the buyer's own suppliers only — a graph match the buyer\ndoesn't have at all is the MoR's concern (surfaced at commit via the\nsubmission's `suggested_supplier_company`), never shown to the buyer." } ] } ], "bundled": true }