---
title: "Antibody records"
method: GET
path: "/antibodies/"
tags: ["Data"]
---

# Antibody records

`GET /antibodies/`

## Request

- Base URL: `https://onlygoodantibodies.co.uk/api/v1`
- URL: `https://onlygoodantibodies.co.uk/api/v1/antibodies/`
- Auth: none required

Antibody metadata with per-application recommendations and figure URLs.

**This endpoint has a side effect.** Called without `preview=true` it returns only what is new since your last call and *advances your review cursor*, and is limited to one such call an hour - so a client that fails while parsing loses that delta. Use `preview=true`, or `advance_cursor=false`, or prefer `/manifest/` with an ETag, which is idempotent.

## Query parameters

- `preview` boolean
- `advance_cursor` boolean
- `since` string
- `gene` string
- `application` string
- `recommended_only` boolean
- `limit` integer
- `offset` integer

## Response `200`

Success.

- object
  - `consumer` string
  - `count` integer
  - `matched` integer
  - `application_filter` 'WB' | 'IP' | 'ICC-IF' | 'FC' | 'IHC' | 'null', nullable: The application code `?application=` was read as; null when not asked.
  - `complete` boolean
  - `cursor_advanced` boolean
  - `preview` boolean
  - `since` string, nullable
  - `recommendation_scope` string: What an OGA recommendation does and does not cover. The same sentence on every response, and the same one the public pages carry.
  - `application_notes` object: Temporary notices keyed by application (WB, IP, ICC-IF, FC, IHC). Show the sentence beside that application's results. Empty when no notice is in force.
  - `antibodies` Antibody[]
    - `antibody_name` string: The catalogue number.
    - `gene` string
    - `gene_has_recommendations` boolean, nullable
    - `gene_page_url` string, uri
    - `created_at` string, date-time, nullable
    - `metadata` AntibodyMetadata
      - `rrid` string, nullable
      - `supplier` string, nullable
      - `host` string, nullable
      - `clonality` string, nullable
      - `clone_id` string, nullable
      - `recombinant` string, nullable: "Yes" or null, for backward compatibility.
      - `product_link` string, uri, nullable
      - `discontinued` boolean
    - `oga_support` OgaSupport: One result per application, in the four rungs the pages print. The field to switch on.
      - `WB` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
      - `IP` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
      - `ICC-IF` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
      - `FC` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
      - `IHC` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
    - `recommendations` Recommendations: The raw curated booleans, kept for existing integrations. `false` cannot distinguish "assessed and not recommended" from "never assessed", and cannot express `limited_support` either - use `oga_support`.
      - `WB` boolean
      - `IP` boolean
      - `ICC-IF` boolean
      - `FC` boolean
      - `IHC` boolean
    - `oga_recommendations` OgaRecommendations: One recommendation per application. Legacy — see `OgaSupport`.
      - `WB` 'recommended' | 'not_recommended' | 'not_tested': OGA's recommendation for one application. **Legacy — prefer `oga_support`**, which has a value for each of the four rungs this one collapses into three. Still emitted on every response and not going anywhere. - `recommended` - The characterisation data supports this application in the conditions tested. - `not_recommended` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
      - `IP` 'recommended' | 'not_recommended' | 'not_tested': OGA's recommendation for one application. **Legacy — prefer `oga_support`**, which has a value for each of the four rungs this one collapses into three. Still emitted on every response and not going anywhere. - `recommended` - The characterisation data supports this application in the conditions tested. - `not_recommended` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
      - `ICC-IF` 'recommended' | 'not_recommended' | 'not_tested': OGA's recommendation for one application. **Legacy — prefer `oga_support`**, which has a value for each of the four rungs this one collapses into three. Still emitted on every response and not going anywhere. - `recommended` - The characterisation data supports this application in the conditions tested. - `not_recommended` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
      - `FC` 'recommended' | 'not_recommended' | 'not_tested': OGA's recommendation for one application. **Legacy — prefer `oga_support`**, which has a value for each of the four rungs this one collapses into three. Still emitted on every response and not going anywhere. - `recommended` - The characterisation data supports this application in the conditions tested. - `not_recommended` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
      - `IHC` 'recommended' | 'not_recommended' | 'not_tested': OGA's recommendation for one application. **Legacy — prefer `oga_support`**, which has a value for each of the four rungs this one collapses into three. Still emitted on every response and not going anywhere. - `recommended` - The characterisation data supports this application in the conditions tested. - `not_recommended` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
    - `oga_display` OgaDisplay: Everything needed to STATE one result, per application: the printed rung, the clause behind it, the two composed, and the colour family the pages use. Drawn from the same reader as `oga_support`, so a surface never assembles its own sentence.
      - `WB` object
        - `support` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
        - `words` 'Supportive' | 'Limited support' | 'Not supportive' | 'Not tested': The rung as printed.
        - `qualifier` string: What was seen, as a clause - e.g. "detects the target, but is not selective". Empty where that axis was not judged.
        - `sentence` string: The rung and the clause, composed.
        - `tone` 'supportive' | 'qualified' | 'not-supportive' | '': The colour family the pages use.
        - `tab` boolean: A supportive result the data fell short of. The pages keep it green and mark it.
      - `IP` object
        - `support` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
        - `words` 'Supportive' | 'Limited support' | 'Not supportive' | 'Not tested': The rung as printed.
        - `qualifier` string: What was seen, as a clause - e.g. "detects the target, but is not selective". Empty where that axis was not judged.
        - `sentence` string: The rung and the clause, composed.
        - `tone` 'supportive' | 'qualified' | 'not-supportive' | '': The colour family the pages use.
        - `tab` boolean: A supportive result the data fell short of. The pages keep it green and mark it.
      - `ICC-IF` object
        - `support` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
        - `words` 'Supportive' | 'Limited support' | 'Not supportive' | 'Not tested': The rung as printed.
        - `qualifier` string: What was seen, as a clause - e.g. "detects the target, but is not selective". Empty where that axis was not judged.
        - `sentence` string: The rung and the clause, composed.
        - `tone` 'supportive' | 'qualified' | 'not-supportive' | '': The colour family the pages use.
        - `tab` boolean: A supportive result the data fell short of. The pages keep it green and mark it.
      - `FC` object
        - `support` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
        - `words` 'Supportive' | 'Limited support' | 'Not supportive' | 'Not tested': The rung as printed.
        - `qualifier` string: What was seen, as a clause - e.g. "detects the target, but is not selective". Empty where that axis was not judged.
        - `sentence` string: The rung and the clause, composed.
        - `tone` 'supportive' | 'qualified' | 'not-supportive' | '': The colour family the pages use.
        - `tab` boolean: A supportive result the data fell short of. The pages keep it green and mark it.
      - `IHC` object
        - `support` 'supportive' | 'limited_support' | 'not_supportive' | 'not_tested': What the characterisation data shows for one application, in the four rungs every OGA page prints. **This is the field to switch on.** - `supportive` - The characterisation data supports this application in the conditions tested. - `limited_support` - Tested; the characterisation data does not support this application overall, and the antibody was still seen to do what the application is for. - `not_supportive` - Tested; the characterisation data does not support this application in the conditions tested. - `not_tested` - Not tested for this application. The legacy `oga_recommendations` reports `not_recommended` for both `limited_support` and `not_supportive`, so a client switching on it files an antibody that did what the application is for with one that showed nothing. On the live dataset that is 491 of 1,833 negatives. Results are based on consensus protocols. Antibody performance is assay, protocol and sample dependent, so performance in your own experimental context may differ and needs its own controls.
        - `words` 'Supportive' | 'Limited support' | 'Not supportive' | 'Not tested': The rung as printed.
        - `qualifier` string: What was seen, as a clause - e.g. "detects the target, but is not selective". Empty where that axis was not judged.
        - `sentence` string: The rung and the clause, composed.
        - `tone` 'supportive' | 'qualified' | 'not-supportive' | '': The colour family the pages use.
        - `tab` boolean: A supportive result the data fell short of. The pages keep it green and mark it.
    - `oga_qualifiers` OgaQualifiers: The clause behind the result, per application, for the applications that have one. Absent keys are not a missing result - they are an axis nobody judged.
      - `WB` string
      - `IP` string
      - `ICC-IF` string
      - `FC` string
      - `IHC` string
    - `oga_methods` OgaMethods: How each supportive published figure was made, per application (2.4.0). Keys appear only where the result is supportive AND there is a methods record, so a key appears when a result is regraded to supportive; an absent key says nothing about the antibody. Read from the report that published the figure, never from an unpublished lab record, except where `amount_basis` says `lab_record`.
      - `WB` object
        - `text` string: The methods paragraph the website's "Copy methods" button copies: a heading line, the paragraph with this antibody and its dilution, and the DOI it was published under. A condition the report does not state is left out, never written as "not recorded".
        - `amount` string, nullable: The dilution or amount of THIS antibody, as the source writes it - "1/500", "2 µg", "2 µg/ml". null when no source states one.
        - `amount_basis` 'report_named' | 'report_protocol' | 'report_general' | 'lab_record' | 'null', nullable: Where `amount` came from: the report naming this antibody with its value; the protocol amount the report gives every antibody; a general statement in the report; or, where the report gives none or its value was found to be an error, the lab record.
        - `source` string, uri, nullable: The report DOI the text cites.
        - `conditions` object: The run-level conditions as stated in the report, keyed by name - e.g. lysis_buffer, blocking, secondary_antibody, microscope. Only keys the report states are present; the set of possible keys differs by application.
      - `IP` object
        - `text` string: The methods paragraph the website's "Copy methods" button copies: a heading line, the paragraph with this antibody and its dilution, and the DOI it was published under. A condition the report does not state is left out, never written as "not recorded".
        - `amount` string, nullable: The dilution or amount of THIS antibody, as the source writes it - "1/500", "2 µg", "2 µg/ml". null when no source states one.
        - `amount_basis` 'report_named' | 'report_protocol' | 'report_general' | 'lab_record' | 'null', nullable: Where `amount` came from: the report naming this antibody with its value; the protocol amount the report gives every antibody; a general statement in the report; or, where the report gives none or its value was found to be an error, the lab record.
        - `source` string, uri, nullable: The report DOI the text cites.
        - `conditions` object: The run-level conditions as stated in the report, keyed by name - e.g. lysis_buffer, blocking, secondary_antibody, microscope. Only keys the report states are present; the set of possible keys differs by application.
      - `ICC-IF` object
        - `text` string: The methods paragraph the website's "Copy methods" button copies: a heading line, the paragraph with this antibody and its dilution, and the DOI it was published under. A condition the report does not state is left out, never written as "not recorded".
        - `amount` string, nullable: The dilution or amount of THIS antibody, as the source writes it - "1/500", "2 µg", "2 µg/ml". null when no source states one.
        - `amount_basis` 'report_named' | 'report_protocol' | 'report_general' | 'lab_record' | 'null', nullable: Where `amount` came from: the report naming this antibody with its value; the protocol amount the report gives every antibody; a general statement in the report; or, where the report gives none or its value was found to be an error, the lab record.
        - `source` string, uri, nullable: The report DOI the text cites.
        - `conditions` object: The run-level conditions as stated in the report, keyed by name - e.g. lysis_buffer, blocking, secondary_antibody, microscope. Only keys the report states are present; the set of possible keys differs by application.
      - `FC` object
        - `text` string: The methods paragraph the website's "Copy methods" button copies: a heading line, the paragraph with this antibody and its dilution, and the DOI it was published under. A condition the report does not state is left out, never written as "not recorded".
        - `amount` string, nullable: The dilution or amount of THIS antibody, as the source writes it - "1/500", "2 µg", "2 µg/ml". null when no source states one.
        - `amount_basis` 'report_named' | 'report_protocol' | 'report_general' | 'lab_record' | 'null', nullable: Where `amount` came from: the report naming this antibody with its value; the protocol amount the report gives every antibody; a general statement in the report; or, where the report gives none or its value was found to be an error, the lab record.
        - `source` string, uri, nullable: The report DOI the text cites.
        - `conditions` object: The run-level conditions as stated in the report, keyed by name - e.g. lysis_buffer, blocking, secondary_antibody, microscope. Only keys the report states are present; the set of possible keys differs by application.
      - `IHC` object
        - `text` string: The methods paragraph the website's "Copy methods" button copies: a heading line, the paragraph with this antibody and its dilution, and the DOI it was published under. A condition the report does not state is left out, never written as "not recorded".
        - `amount` string, nullable: The dilution or amount of THIS antibody, as the source writes it - "1/500", "2 µg", "2 µg/ml". null when no source states one.
        - `amount_basis` 'report_named' | 'report_protocol' | 'report_general' | 'lab_record' | 'null', nullable: Where `amount` came from: the report naming this antibody with its value; the protocol amount the report gives every antibody; a general statement in the report; or, where the report gives none or its value was found to be an error, the lab record.
        - `source` string, uri, nullable: The report DOI the text cites.
        - `conditions` object: The run-level conditions as stated in the report, keyed by name - e.g. lysis_buffer, blocking, secondary_antibody, microscope. Only keys the report states are present; the set of possible keys differs by application.
    - `experiments` Experiment[]
      - `experiment_type` 'WB' | 'IP' | 'ICC-IF' | 'FC' | 'IHC': `IHC` since 2.2.0: immunohistochemistry on cell pellets, not tissue.
      - `experiment_type_display` string
      - `control` 'knockout' | 'knockdown' | 'null', nullable: The genetic control the figure's legend names: a knockout line, or a knockdown (siRNA/shRNA) of the gene. null on a figure released before September 2026, which is read as knockout on the gene page.
      - `image_url` string, uri, nullable: Public, permanent, no key required. Send a User-Agent: bot protection in front of the CDN can refuse a default library one and the 403 looks like a permissions problem.
    - `embed_urls` object, nullable

## Other responses

- `400`: A parameter could not be read.
- `401`: No X-API-Key header.
- `403`: Key unknown or inactive, or this endpoint is not available to your account type.
- `429`: Over 60/minute or 1000/hour. Carries `Retry-After` in seconds.

---

[API](https://skmtc.dev/onlygoodantibodies/apis/oga-data-api.md) · [All operations](https://skmtc.dev/onlygoodantibodies/apis/oga-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/onlygoodantibodies/apis/oga-data-api/revisions/8df16a210acb?raw)
